CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
在不少的php框架中都有防csrf攻击的方法,比如yii2.0,建议在开发的时候尽量不要全局关闭。
你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:以你名义发送邮件,转账,付款
攻击原理图:
一次攻击的两个步骤:
1.登录受信任网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。
譬如某网站A的关键操作是www.test.com?a=1
假如你登陆了A网站,没退出,又登陆了B网站,B网站中恰好有这么一段代码
那就直接执行了A网站的关键操作
上诉我们描述了get请求时的csrf攻击,即使不是get提交,我们也可以用js或者其他工具模拟请求方式
防御:
CSRF的防御一般都在服务器端进行验证,常用的防御措施如下:
1.Cookie Hashing(表单都要包含一串Hash值做验证):表单中加一个隐藏值,提交表单在服务器端验证;
2.每次关键提交操作,加一个验证码或者其他验证手段(比如app端二次验证),但是不是很友好;
3.通过用户传递的token,referer来检测
4.严格设置cookies域(避免全站通用)