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

时间:2015-05-21 12:58:07

标签: orchardcms iis-8.5

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

我尝试了下面的代码,没有运气:

<location path="Admin">
   <system.webServer>
      <security>
         <ipSecurity allowUnlisted="false">
         </ipSecurity>
      </security>
   </system.webServer>
</location>

http://www.iis.net/configreference/system.webserver/security/ipsecurity

还尝试为根目录创建用户/帐户/ LogOn的虚拟目录并设置其访问权限,但这也不起作用。

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果我理解你的动机,我认为最好编写一个过滤模块,让你完全控制在什么条件下会发生什么。

[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();
        }
    }
}
相关问题