1

我怀疑这是由于我的测试配置,但我想问问你们的想法。我正在玩一个快速测试项目。我有一个简单的表单认证页面和一个订单页面(两个字段和一个显示“订单”的列表)。订单页面设置为在检索参数时使用 Request.Form[] 以防止输入作为 GET 操作进入。

我在 Page_Init 中设置了 ViewStateUserKey 并明确地将 EnableViewStateMac 设置为 true(即使它默认为 true)。

然后我制作了一个 .HTM,将表单发布到我的订单页面,为两个字段(产品和数量)设置值。我应该注意,我没有费心将视图状态作为表单提交的一部分。我在浏览器的真实页面上查看了源代码,删除了除表单字段之外的所有内容,添加了一些 javascript 来设置字段值并执行 form.submit()

我登录到测试项目,并打开了 .HTM。.HTM 成功提交了表单,当我刷新订单页面时,我可以看到虚假订单。

为什么 ViewStateUserKey 没有对此进行保护?它不应该阻止那种类型的攻击吗?在此示例中,我没有篡改视图状态,我只是创建了一个执行正常表单发布的页面,因此 ViewStateUserKey用于防止 ViewState 篡改(这让我觉得完全没有价值,或者这是否有效,因为两个页面都是活的在同一台物理机器上?

4

1 回答 1

1

您是否在测试页面中包含原始视图状态字段?如果您为特定用户复制了一个有效的视图状态,然后以该用户的身份提交了它,那么是的,您会期望它能够正常工作。

ViewStateUserKey 功能仅阻止您获取从您自己的用户创建的 ViewState 并在其他用户无意中提交的提交中使用它。

于 2011-05-08T14:13:32.827 回答