我试图拒绝访问所有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();
}
}
}