限制通过IP访问Orchard CMS的管理端



我试图拒绝访问所有ip到/Admin与几个例外。Orchard CMS 1.8.1应用程序在IIS 8.5上运行。我正在尝试IP限制规则,但对我来说,这似乎不是正确的工具,因为我只能在文件夹上设置访问权限,而不是单个页面。(设法拒绝访问admin主题。)

我尝试了下面的代码片段,但没有成功:

<location path="Admin">
   <system.webServer>
      <security>
         <ipSecurity allowUnlisted="false">
         </ipSecurity>
      </security>
   </system.webServer>
</location>
http://www.iis.net/configreference/system.webserver/security/ipsecurity

还尝试为根目录创建一个用户/帐户/登录虚拟目录,并设置其访问权限,但也不工作

我正在考虑为/Admin设置URL重写,但不确定如何开始或我应该遵循什么逻辑。

有什么建议吗?

如果我正确理解了你的动机,我认为最好写一个过滤器模块,它将使你完全控制在什么条件下会发生什么。

[OrchardFeature("FeatureDefinedInModuleTxtManifest")]
public class AdminAccessFilter : FilterProvider, IAuthorizationFilter
{
    private readonly IAuthorizer _authorizer;
    public AdminAccessFilter(IAuthorizer authorizer)
    {
        _authorizer = authorizer;
        Logger = NullLogger.Instance;
    }
    public ILogger Logger { get; set; }
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!AdminFilter.IsApplied(filterContext.RequestContext) || !_authorizer.Authorize(StandardPermissions.AccessAdminPanel))
        {
            // Not an admin area or no permission already, do nothing
            return;
        }
        var request = filterContext.HttpContext.Request;
        var userIp =
            request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? // Proxy
            request.UserHostAddress;
        if (userIp != "100.100.100.100") // Your logic for denying access
        {
            Logger.Fatal("Unauthorized admin access detected from {0}", userIp);
            filterContext.Result = new HttpUnauthorizedResult();
        }
    }
}

最新更新