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

Nat*_*ate 5 c# asp.net security authentication asp.net-mvc

我有一个ASP.NET MVC网站,我想添加一个小管理页面.我遇到的问题是我将全部部署这个,我将不会提供SSL.我可以要求管理员使用远程桌面并使用本地浏览器来执行管理.

可以这样做吗?我基本上希望得到与<customeErrors mode="RemoteOnly" />我的管理页面相同的行为.我可以通过web.config这样做吗?

Kin*_*nus 13

Request.IsLocal 是你的朋友.

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

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

自定义属性

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

ActionResult上的自定义属性

MVC3以后允许您在Controller级别设置属性,而不是Method也是如此,因此您可以锁定对负责管理页面的整个控制器的访问.


Chr*_* HG 8

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

整个控制器的基本用法:

[IsLocal]
public class LocalOnlyController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者根据具体方法:

public class SomeController : Controller
{
    [IsLocal]
    public ActionResult LocalOnlyMethod()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要抛出安全性异常而不是302重定向:

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