防御CSRF问题

CSRF,Cross-site request forgery,跨站点请求伪造。

简而言之,这个攻击就是伪造。伪造出一个合法站点的链接,诱使你去点击;或者伪造一个表单,提交给合法站点。

在一个系统里面,用你这个合法的账号,规规矩矩地浏览,使用,是不会出什么乱子的,你所点击的链接,提交的表单,都是系统提供的,在开发人员预先控制范围之内。但CSRF攻击,则是伪造出一个链接,链接地址带上居心不良的参数,比如指向删除动作,或者你账号权限范围内,根本无法打开的记录ID,然后诱使你点击;或者伪造出一个表单,将一些乱七八糟的内容提交到你网站。

所以,应对CSRF攻击,就有两个方面:

1、针对get请求,检查请求的referer,看是否来源于本站点;
2、针对post,使用token进行校验。

对第一点,可以创建拦截器。

凡伪造的链接,要么是直接在浏览器的地址栏上直接输入;要么是放在系统外的什么地方,比如邮件里,然后诱使你去点击。拦截器就是检查过来的请求,是不是从网站里面来的(靠检查referer)。

第二点,可以使用随机token来进行验证表单的真实性。

原理为:
1)表单初始化时,服务器端输出一个随机token,放置于表单内一个隐藏控件里
2)表单提交时,会将隐藏控件内的token值一起提交
3)服务器端检查这个提交上来的token,如果不存在或者与服务器留底的token对应不上,则说明表单伪造

asp.net mvc的应对表单提交CSRF之策就是这样。只不过它有简约的语句和特性,不用我们纯手工的作坊模式:
1)在视图的form里放置一句:@Html.AntiForgeryToken()。其实输出到浏览器后就是一个隐藏控件,内含token值。
2)在控制器里接收post的action前加上特性:[ValidateAntiForgeryToken],其实就是校验token。

相关拙作:Web安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值