我知道ASP.NET MVC中的AntiForgeryToken功能可以防止跨站点攻击。
但是,它是否会阻止在POST之前更改表单值?
例如,恶意攻击者可能会发现评级页面始终包含一个隐藏字段,该字段包含评级实体ID,并创建POST请求以人为地评估所有自己的实体。
确保GET和POST之间的表单值没有更改的首选方法是什么?
答案 0 :(得分:3)
AntiForgeryToken可防止恶意网站欺骗用户使用与原始网站相同的表单并将其发布到原始网站。它不会阻止您描述的场景。以下是攻击者为了规避令牌而可以继续进行的操作:
正如您所看到的,唯一的区别就是您没有使用过AntiForgeryToken,黑客需要发送额外的GET请求来读取令牌的值。
绝对没有办法阻止攻击者修改隐藏字段的值,除了验证提交表单的用户(我认为为了对用户进行投票必须进行身份验证)不是该用户的所有者他投票的实体ID。