一.CSRF是什么?
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
二.CSRF可以做什么?
你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
三. CSRF攻击模式图
其实就是在浏览器存了a的凭证,认为通过该客户端过来的访问通过了认证,而B可能是web 可能就是个邮件里面的恶意链接,只要用户访问了,即可以盗用a的凭证干坏事。
四. CSRF防范
1. 服务端csrf token
在服务器端输出页面时候增加一个随机key value的token值,这样所有a网站的页面等于有一个随机参数,这样在a网站提交的所有请求中都要去验证这个参数的正确性。这样B就无法获取到这个随机值,而验证失败,任何提交访问都会返回错误
2. cookie值的md5
这个和1类似,将当前站点cookie,生成的md5传到后台进行验证。这样B无法跨站获取到A的cookie,无法构造出该参数。
3. 验证码
这个就是在任意表单提交都增加验证码功能。B当然就不行了。
总结,当然我推荐1这个方式,而且我们目前网站使用的phalcon框架自带了security csrf token的一系列函数,直接使用方式一
<input id="token" type="hidden" name="<?php echo $this->security->getTokenKey()?>"
value="<?php echo $this->security->getToken() ?>" />
POST后只需要$this->security->checkToken() 验证这个函数成功即可。
使用ajax也可以带上这个id为token的input框的值。