我有一个使用 Impersonation 的网站。当我的匿名用户设置为 IUSR 并且应用程序池标识设置为 NetworkService 时,某些页面不显示。我得到一个空白页,没有错误消息。
如果我将匿名用户设为 ApplicationPoolIdentity,并将池身份设为 localSystem,那么它就可以正常工作。
如果我将匿名用户改为管理员用户,一切就都正常了。
我知道我遇到了安全问题,但我不知道需要设置哪个文件夹的安全策略才能使一切正常运行。
我将网站文件夹的读/写权限授予 IUSR、IIS_IUSRS、网络服务和我的模拟用户组。
有人知道我许可后会做什么吗?
我也找到了这篇文章,但没有成功..http://blogs.iis.net/webtopics/archive/2009/03/13/changes-to-application-pool-identities-in-iis-7-5-beta.aspx
答案1
请参阅文章构建安全的 ASP.NET 应用程序:身份验证、授权和安全通信。
这将使您更好地了解 ASP.NET 应用程序在模拟时使用的身份。授予必要的权限,您就没问题了
。HTH
答案2
我发现了问题。
http://forums.asp.net/p/1459236/3386036.aspx
存在问题
微软已经确认这是 .Net Framework 2.0、3.0 和 3.5 中的一个错误。下面是我从他们那里收到的电子邮件中的一段引文:
“
我们看到的问题确实是一个错误,以下是对该错误的解释。
摘要“Params 对象是 QueryString、Form、Cookies 和 ServerVariables 对象的集合。首次创建 params 对象时,它会在 FillInParamsCollection 方法中将这些对象中的每一个添加到其集合中。要存储的第一个对象是 QueryString 对象。如果尚未创建此对象(在我们的例子中没有创建),则此对象的构造函数会尝试填充 QueryString 对象。在此过程中,它通过调用 HttpRequest 上的 GetEncodingFromHeaders() 方法获取编码。此方法专门查找以“UP”开头的 User-Agent。如果是这样,它会尝试从 Headers 集合中检索“x-up-devcap-post-charset”标头。但是,由于 Headers 集合尚未初始化,因此它也会执行其初始化例程。其初始化例程执行的操作之一是将 Params 集合设置为 NULL。当 FillInParamsCollection 方法尝试初始化 QueryString 对象之后的下一个对象时,这就是导致 AV 的原因。”
解决方法 预先初始化 QueryString 对象以避免出现此问题。只需访问 Request.QueryString()。我们无需对其进行任何操作,只需访问它即可。
样本:
Object o = context.Request.QueryString;
NameValueCollection parameters = context.Request.Params;
“
解决方案是直接在代码中使用Request["Value"]
,而不是Request.Params["Value"]