CSRF攻击:陌生链接不要随便点
什么是CSRF攻击?
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。
通常黑客会通过三种方式去实施CSRF攻击:
- 自动发起GET请求。
接口隐藏在img标签内,欺骗浏览器这是一张图片资源。 - 自动发起POST请求。
伪造POST请求,构建一个隐藏的表单,该表单的内容就是请求接口。 - 引诱用户点击链接。
第三方链接
和 XSS 不同的是,CSRF 攻击不需要将恶意代码注入用户的⻚面,仅仅是利用服务器的漏洞和用户的登录状态来实施攻击。
如何防止 CSRF 攻击
发起 CSRF 攻击的三个必要条件:
第一个,目标站点一定要有 CSRF 漏洞;
第二个,用户要登录过目标站点,并且在浏览器上保持有该站点的登录状态;
第三个,需要用户打开一个第三方站点,可以是黑客的站点,也可以是一些论坛。
- 充分利用好 Cookie 的 SameSite 属性
SameSite 选项通常有 Strict、Lax 和 None 三个值。
Strict 最为严格。如果 SameSite 的值是 Strict,那么浏览器会完全禁止第三方Cookie。
Lax 相对宽松一点。在跨站点的情况下,从第三方站点的链接打开和从第三方站点提交Get 方式的表单这两种方式都会携带 Cookie。禁止POST方法,或是Img, Iframe等标签加载的URL。
而如果使用 None 的话,在任何情况下都会发送 Cookie 数据。 -
验证请求的来源站点
Referer 是 HTTP 请求头中的一个字段,记录了该 HTTP 请求的来源地址。
从上图可以看出,Origin 属性只包含了域名信息,并没有包含具体的 URL 路径,这是Origin 和 Referer 的一个主要区别。在这里需要补充一点,Origin 的值之所以不包含详细路径信息,是有些站点因为安全考虑,不想把源站点的详细路径暴露给服务器。
因此,服务器的策略是优先判断 Origin,如果请求头中没有包含 Origin 属性,再根据实际
情况判断是否使用 Referer 值。 -
CSRF Token
流程大致分为两步:
第一步,在浏览器向服务器发起请求时,服务器生成一个 CSRF Token。CSRF Token 其实就是服务器生成的字符串,然后将该字符串植入到返回的⻚面中。你可以参考下面示例代码:第二步,在浏览器端如果要发起转账的请求,那么需要带上⻚面中的 CSRF Token,然后
服务器会验证该 Token 是否合法。如果是从第三方站点发出的请求,那么将无法获取到
CSRF Token 的值,所以即使发出了请求,服务器也会因为 CSRF Token 不正确而拒绝请
求。
此文章为4月Day30学习笔记,内容来源于极客时间《浏览器原理》,学习使我快乐,每天进步一点点💪💪
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net