仅将ASP.NET MVC应用程序管理网站锁定到LocalHost

本文关键字:网站 锁定 LocalHost 管理 应用程序 ASP NET MVC 仅将 | 更新日期: 2023-09-27 17:58:55

我有一个ASP.NET MVC网站,我想在其中添加一个小型管理页面。我的问题是,我将全面部署它,并且我将没有可用的SSL。我可以要求管理员远程桌面并使用本地浏览器执行管理。

这能做到吗?除了我的管理页面之外,我基本上希望获得与<customeErrors mode="RemoteOnly" />相同的行为。我可以通过web.config实现吗?

仅将ASP.NET MVC应用程序管理网站锁定到LocalHost

Request.IsLocal是您的朋友。

http://msdn.microsoft.com/en-us/library/system.web.httprequest.islocal.aspx

您可以使用它来检查请求是否来自本地计算机。

自定义属性

然后可以将其扩展为自定义属性,但这可能有些过头了。如果这是你选择的路线,这是一个很好的例子,可以做类似的事情:

ActionResult 上的自定义属性

MVC3以后的版本允许您在控制器级别而不是方法级别设置属性,这样您就可以锁定对负责管理页面的整个控制器的访问。

我通过编写一个自定义属性来完成,如下所示:

public class IsLocalAttribute : AuthorizeAttribute
{
    public bool ThrowSecurityException { get; set; }
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isLocal = httpContext.Request.IsLocal;
        if (!isLocal && ThrowSecurityException)
            throw new SecurityException();
        return isLocal;
    }
}

整个控制器的基本用途:

[IsLocal]
public class LocalOnlyController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

或者采用一种特定的方法:

public class SomeController : Controller
{
    [IsLocal]
    public ActionResult LocalOnlyMethod()
    {
        return View();
    }
}

如果你想抛出一个安全异常而不是302重定向:

public class SomeController : Controller
{
    [IsLocal(ThrowSecurityException = true)]
    public ActionResult LocalOnlyMethod()
    {
        return View();
    }
}