CSRF攻击

1,584 阅读2分钟

CSRF叫做跨站请求伪造攻击,也有叫XSRF的,其实都差不多,你也可以认为是XSS和CSRF的结合。对于这个攻击原本我是不怎么理解的,写了个接口,然后试了一下,直接就发起了请求。

先看接口:

const http=require('http');



http.createServer(function(requset,response){

 response.setHeader('Access-Control-Allow-Credentials', 'true');

 response.end('123');

}).listen(3000);

当我用图片地址访问的时候,出现:

A cookie associated with a cross-site resource at was set without the SameSite attribute. It has been blocked, as Chrome now only delivers cookies with cross-site requests if they are set with SameSite=None

大概意思就是不允许携带cookie,如果我设置了:

response.setHeader('Set-Cookie', 'a=888;Path=/;SameSite=Lax');

然后用img标签请求成功了:

<img src="http://192.168.164.31:3000/" alt="">

虽然cookie没有携带,不知道是不是这个原因:

Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

写不出好的接口去验证,于是只好不求甚解的简单理解一下,就是用户通过访问安全网站,进行登录,登录成功后,用户验证登录的信息记录在了浏览器,这时候用户在安全网站可以正常操作,之后要是用户在同一个浏览器访问不安全网站,不安全网站通过各种方法通过安全网站的用户登录信息进行攻击,比如:

1、当安全网站A登录之后,不安全网站B通过img、script等不会跨域的元素调用get请求的接口,如果是通过请求携带cookie判断的话,直接就可以请求成功。

2、如果后台是POST接口,校验数据用的也是post才能获取参数,不安全网站B可以通过ifram嵌入安全网站A,然后通过form表单提交请求。

这是一般我们认知的简单CSRF,有资料说,可以触发请求的方法达到了几百种,单单HTML就有196种。还有什么PDF JavaScript、ServiceWorkers等奇奇怪怪的方法去进行XSRF攻击。

有攻击就有防御方法,检查Referer、添加校验token、不保存cookie、不使用全局cookie、自定义header属性并校验等等。

虽然不知道CSRF攻击是不是真的那么简单,突然发现自己做过的项目好像并没有想象中的那么安全,感觉随便都能被攻击了。

像阿里这种几乎是所有黑客攻击的第一目标,他们要遭遇的可不仅仅是CSRF这种小儿科玩意儿,很难想象他们的安全团队是多么的牛逼。