跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,一般缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登陆的Web应用程序上执行非本意的操做的攻击方法。laravel
简单的说,就是利用游览器对用户的信任,好比,用户已经登陆了ww.aaa.com,天然aaa这个网站就会将用户的登陆状态session存在cookie中; 而后,aaa.com这个网页有一个对做品点赞的功能,点赞提交地址为aaa.com/api.like?id=777
; 这时,另一个叫www.bbb.com的网站,放了这样一个元素<img src="aaa.com/api.like?id=888">
,这样的话,一旦用户进入这个bbb.com页面,就会请求aaa.com这个网站的点赞接口,并且点赞的用户对象是888; 最后由于用户的登陆信息还没有过时,那就等于给id为888这个做品点赞了,然而,用户并不知情。git
有两种方法:github
使用iframe会引出一些不安全的问题,好比绕过referer验证,好比资源盗用等,因此,不少网站会设置X-Frame-Options
为 DENY
,这也是一个安全的补充点。web
问:既然请求静态资源都是get请求,那么要是后端把点赞接口改成post的方式也能够吧?后端
答:不能够。由于,bbb.com网站彻底能够设置一个form表单,action为bbb.com,method为post,接着input的name为id,value为888,而后,script代码直接submit表单。为了页面不重定向,还能够在form外层加一个iframe。因为form表单实际上是直接跳转,因此不存在跨域的问题。api
防止CSRF的最好方法仍是带token吧~跨域