ASP.Net MVC CSRF跨站请求伪造 防范

CSRF跨站请求伪造

什么是混淆代理?

引用自Wikipedia的概念:

混淆代理是一个计算机程序,它被其他部分程序无辜地愚弄,以至于错误地使用自己的权限。它是特权扩大的一个具体类型。

在此类情形当中,代理就是浏览器,它受到了愚弄以至于误用其权限,将用户呈献给远程
网站。

本质很简单,CSRF是利用浏览器存储在本地的A站点cookie,在伪造的B站点中伪造请求,
再由浏览器打开新站点并且利用伪造的请求,读取A站点cookie,从而达到目的。

如何防止CSRF?

  • 令牌验证

使用@Html.AntiForgeryToken辅助方法将会产生一个加密值作为隐藏的输入元素。
该值将与作为会话cookie存储在用户浏览器中的另外一个值相匹配,在提交表单
时,ActionFilter就回验证这两个值是否匹配。

  • 幂等的GET请求

如果一个操作是幂等的,就可以重复执行多次而不改变执行结果,一般来说仅通过
使用POST请求修改数据库或者网站上的内容,就可以有效地防御全部CSRF攻击。

  • HttpReferrer验证