CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。例如:一个网站用户Bob可能正在浏览聊天论坛,而同时另一个用户Alice也在此论坛中,并且后者刚刚发布了一个具有Bob银行链接的图片消息。设想一下,Alice编写了一个在Bob的银行站点上进行取款的form提交的链接,并将此链接作为图片src。如果Bob的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当Bob的浏览器尝试装载图片时将提交这个取款form和他的cookie,这样在没经Bob同意的情况下便授权了这次事务。
下面是CSRF的常见特性:
1. 依靠用户标识危害网站
2. 利用网站对用户标识的信任
3. 欺骗用户的浏览器发送HTTP请求给目标站点
4. 可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击
一个简单的例子:
* 用户小z登录了网站A,同时打开网站B
* 网站B隐蔽的发送一个请求至网站A
* 网站A通过session、cookie等身份标记判断是用户小z,执行对应操作
这样网站B内的非法代码就盗用了用户小z的身份,在小z不知情的情况下执行了攻击者需要的操作,这就是跨站请求伪造。
防御CSRF可以通过动态token验证的方式来实现,每次请求生成一个动态token给前端,前端在后续的请求中附加该token,如果token不存在或不正确说明不是正常请求,予以屏蔽,从而达到解决CSR