19

我试图打开视图状态加密始终作为我在 IIS6 中托管的 ASP.NET 3.5 网站的安全措施。我们关闭了视图状态,但仍然在此字符串中看到一些“控制状态”。在测试环境中,我可以简单地在 web.config 中设置以下内容,并且我无法再将视图状态通过 base64 解码为半明文:

<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">

我什至在 machine.config 中添加了以下内容(由机器密钥生成器生成),并且仍然在我的测试服务器上很好地加密了视图状态:

<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />

我的非测试环境似乎没有接受上述更改,因为我总是可以使用上述设置将视图状态 base64 解码为纯文本。在我进行任何更改后,我总是 iisreset。

关于我的非测试网络服务器的一些信息:

  • 网络场/负载平衡(但目前只有一台服务器可供测试)
  • Sql 会话状态(最初需要 machine.config 中的 machinekey 来设置它)
  • machine.config:部署零售=“真”

谁能建议在哪里寻找可能会干扰 asp.net viewstate 加密的其他设置?

编辑:现在在我的 iis 测试服务器上,我无法撤消 viewStateEncryptionMode 设置,因为它正在加密视图状态,即使我将其设置为“从不”并且我的其他网站似乎都没有使用此设置。我在哪里可以查看该属性被覆盖的位置?除了当我 iisreset/stop www service/touch machine.config 执行的操作之外,是否还有需要清除此设置的缓存?

编辑最后:经过几天的研究配置文件,我放弃并通过代码实现了这个。我已经有一个附加到页面事件的安全模块,所以在 Page_Load 我添加了: Page.RegisterRequiresViewStateEncryption();

我真的很想知道是什么阻止了这个设置在 IIS6 上立即被选中。当我在本地运行 cassini 时,如果我通过页面节点将 viewStateEncryptionMode 设置为“始终”,我会立即看到它对视图状态进行编码并使用 id="__VIEWSTATEENCRYPTED" 呈现附加隐藏字段。当我将其设置为“从不”时,我会立即看到加密关闭。如果我在我的 IIS6 托管网站上对网站进行完全相同的更改,它不会立即生效,但如果我允许设置保留在那里,它最终会生效。我会停止/启动 www 服务,重置 iis,清除 ASPNET 临时缓存,但我不这样做 不知道还能尝试什么?希望这篇文章可以腐烂一段时间,将来有人会看到我经历过的相同行为,我们可以进一步解决这个问题!

4

3 回答 3

2

我知道您发布此内容已经有一段时间了,但是您是否考虑过自己实现 PageStatePersister?PageStatePersister 是负责格式化嵌入在页面中的 ViewState 和 ControlState 数据的组件。如果安全是您最关心的问题,您可以使用任何您想要的加密算法来确保您的数据保持私密。根据您的配置,听起来您处于一个相当强大的环境中,因此显然首先进行负载测试。还值得一提的是,当 MVC 被合并到“经典”ASP.NET WebForms 站点中时,我不知道或体验过 MVC 对 ViewState 的分层参与。

祝你好运。

于 2011-08-05T12:04:00.797 回答
1

Web.config page settings do not apply to pre-compiled ASP.Net application with updatable option disabled. It has been a while but my test server i likely had deployed with updatable option disabled ... lesson learned.

SEE MSDN

Similar Question i Asked, same issue.

于 2012-12-22T20:02:54.173 回答
0

My guess is the that load balanced web farm is the source of the confusion. You stated that only "only one server [is] up for testing right now", but all the symptoms you're experiencing sound exactly like what would happen if multiple servers in the web farm were running, but you only made the web.config and machine.config changes on one server. When you hit the website with your browser, sometimes you would hit one server that was configured one way, sometimes you would hit another server that was configured another way.

于 2011-08-05T16:27:29.637 回答