我试图拒绝将所有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重写,但不确定如何启动或应该遵循什么逻辑。
有什么建议吗?
答案 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();
}
}
}