我怀疑这是由于我的测试配置,但我想问问你们的想法。我正在玩一个快速测试项目。我有一个简单的表单认证页面和一个订单页面(两个字段和一个显示“订单”的列表)。订单页面设置为在检索参数时使用 Request.Form[] 以防止输入作为 GET 操作进入。
我在 Page_Init 中设置了 ViewStateUserKey 并明确地将 EnableViewStateMac 设置为 true(即使它默认为 true)。
然后我制作了一个 .HTM,将表单发布到我的订单页面,为两个字段(产品和数量)设置值。我应该注意,我没有费心将视图状态作为表单提交的一部分。我在浏览器的真实页面上查看了源代码,删除了除表单字段之外的所有内容,添加了一些 javascript 来设置字段值并执行 form.submit()
我登录到测试项目,并打开了 .HTM。.HTM 成功提交了表单,当我刷新订单页面时,我可以看到虚假订单。
为什么 ViewStateUserKey 没有对此进行保护?它不应该阻止那种类型的攻击吗?在此示例中,我没有篡改视图状态,我只是创建了一个执行正常表单发布的页面,因此 ViewStateUserKey仅用于防止 ViewState 篡改(这让我觉得完全没有价值,或者这是否有效,因为两个页面都是活的在同一台物理机器上?