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