我怀疑这是由于我的测试配置,但我想问你们大家的想法。我正在玩一个快速测试项目。我有一个简单的表单身份验证页面和一个订单页面(两个字段和一个显示“订单”的列表)。订单页面设置为在检索参数时使用Request.Form [],以防止输入作为GET操作进入。
我在Page_Init中设置了ViewStateUserKey并将EnableViewStateMac显式设置为true(即使它默认为true)。
然后我创建了一个.HTM,它在我的订单页面上做了一个表单,为两个字段(产品和数量)设置了值。我应该注意,作为表单提交的一部分,我没有打算制作一个视图状态。我在浏览器的真实页面上查看了Source,删除了除表单字段之外的所有内容,添加了一些javascript来设置字段值并执行form.submit()
我登录了测试项目,并打开了.HTM。 .HTM成功提交了表格,当我刷新订单页面时,我可以看到虚假的订单。
为什么ViewStateUserKey没有保护这个?是不是应该阻止这种类型的攻击?在这个例子中,我没有篡改viewstate,我只是创建了一个执行普通表单帖子的页面,因此ViewStateUserKey ONLY 以防止ViewState篡改(这让我觉得完全没用,或者是这工作是因为两个页面都生活在同一台物理机器上?
答案 0 :(得分:1)
您是否在测试页中包含原始viewstate字段?如果您为特定用户复制了有效的视图状态,然后将其作为该用户提交,那么是的,您可能希望它能正常工作。
ViewStateUserKey功能仅阻止您从自己的用户创建ViewState并在其他用户无意中提交的内容中使用它。