CSRF 防护策略

VSole2021-10-13 07:12:05

什么是 CSRF

CSRF(“跨站请求伪造”):攻击者通过邮件、社区发帖等方式诱导受害者进入第三方网站,并且在第三方网站中向被攻击网站发送跨站请求;这主要是利用了受害者在被攻击网站已经获取的登录凭证(cookie),且 cookie 会自动附在对特定域名的请求里的浏览器特性,达到冒充用户对被攻击的网站执行某项操作(如指定受害者的邮箱账户自动将所有收到的邮件都转发到攻击者的邮箱里)的目的。

几种常见的攻击类型

GET 类型的 CSRF 攻击

GET 类型的 CSRF 攻击非常容易实现,在<img>的 url 里构造恶意 URL 即可,用户在任何页面上只要加载了这个<img>,都相当于向该恶意 URL 发出了一次 GET 请求。

POST 类型的 CSRF 攻击

这种类型的CSRF利用起来通常使用的是一个自动提交的表单:

<form action="http://bank.example/withdraw" method=POST>
    <input type="hidden" name="account" value="xiaoming" />
    <input type="hidden" name="amount" value="10000" />
    <input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script> 

超链接类型的 CSRF 攻击

跟上述两种 CSRF 攻击,超链接类型的 CSRF 攻击需要诱导用户主动点击,所以需要一定的欺骗手段,用户点击超链接后会跳转到攻击者构建的一个恶意 URL 里,也相当于是执行了一次 GET 请求。

CSRF的特点

  • CSRF(通常)发生在第三方域名,但如果被攻击网站管控用户内容不严格的话,也有可能被发布恶意超链接等,这样防护起来就更困难了,因为 referer 是来自于本身。
  • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取或修改受害者的隐私数据。

防护策略

针对这两点,我们可以专门制定防护策略,如下:

  • 阻止不明外域的访问
  • 同源检测
  • Samesite Cookie
  • 提交时要求附加本域才能获取的信息
  • CSRF Token / 双重 cookie 验证
  • 在 LocalStorage 里存放登录凭证

同源检测

浏览器在发送请求的时候,会带上originreferer这两个 HTTP 头部字段,一般情况下,我们可以在收到请求的时候校验这两个字段是否来自可信的域名。

但是,虽然浏览器不允许修改originreferer,但是有可能由于浏览器本身的机制,或者是攻击者刻意隐藏,导致请求里并没有这两个字段的信息,对于这种情况,可以考虑拦截掉。

Samesite Cookie

cookie 有个SameSite属性可以防 CSRF 攻击,使用SameSite=Lax后,从别的网站提交 POST 表单或发送 ajax 请求时都不会附上 cookie ,这样就从根本上解决 CSRF 攻击。但这个SameSite属性只在现代浏览器上生效, IE 上是不支持的。

CSRF Token

除了传统的 cookie 以外,我们可以添加一个额外的 token 作为用户凭证。

token 的生成

  • 全局共享:每次登录的时候生成一个随机数写到 cookie 里;以后每次请求接口的时候,前端就从 cookie 中取出这个随机数作为请求参数;后端校验的时候只需要比对接口参数和 cookie 里的值就可以了,也不需要存 session 了(分布式 session 成本较高)。这种方法被称为“双重 cookie”。
  • 每个接口/表单独立生成:针对每个接口/表单都生成一个独立的 token ,“验证码”就属于这种方案。在这种方案下,生成和储存 token 的成本都比较高,建议只用于敏感接口。

双重 cookie 验证

所谓的双重 cookie ,指的是在请求接口时,除了常规带上 cookie 中的用户凭证信息,如 session_id 外,还把 cookie 中的用户凭证信息读出来附在接口请求参数里;这种方案对比起 CSRF Token 方案来说,好在不需要生成额外的 token ,也同样能够起到防御 CSRF 攻击的效果。

在 LocalStorage 里存放登录凭证

CSRF 的关键是:cookie 是自动附在请求里的,那如果登录凭证不是放在 cookie 而是 LocalStorage 里的话,比如使用 jwt 方案,那就从根本上破解了 CSRF 攻击了,不过这样的话,就需要防止 XSS 攻击了。

避免自己的网站被利用

除了需要避免自己的网站被攻击外,我们还需要避免自己的网站被利用来攻击其它网站:

  • 严格限制用户上传的内容,如禁止上传 HTML 文件
  • 不允许用户直接引用外链的图片
  • 对于用户发布的超链接,需要对浏览者提醒这是属于外链的超链接
原文链接:https://segmentfault.com/a/1190000022984599?utm_source=sf-similar-article


cookiecsrf
本作品采用《CC 协议》,转载必须注明作者和本文链接
网站如何防止CSRF攻击
2021-11-12 07:20:53
Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景 中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标 用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF 攻击也称为"one click"攻击。很多人搞不清楚CSRF的概念,甚至有时候 会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没 搞清楚导致的。
服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等 传输协议,通用漏洞,ex
今天分享一篇文章,涉及Redis未授权、SSRF漏洞、宽字节注入、JSONP劫持、CORS、CRLF注入等技能,并详细讲述了其原理和漏洞利用等。能够回连且权限够的话,写crontab利用计划任务执行命令反弹shell?图片加载与下载:通过URL地址加载或下载图片?禁用不需要的协议。禁止30x跳转Java和PHP的SSRF区别PHP支持的协议:
⽹上整理的⾯试问题⼤全,有些 HW ⾯试的题,已经收集好了,提供给⼤家。
1、短信轰炸 参数修改短信轰炸,可以直接修改手机号或者其他参数 Cookie短信轰炸 根据业务的判断 2、手机号遍历枚举 绕过风控继续遍历 简单遍历结 绕过风控方法:修改下面参数,让其构成一个正常参数从而实现绕过
认证后命令执行Gitlab本身包含图片上传功能,所以按照上文构造思路,很容易实现RCE。
渗透测试Tips
2022-04-13 06:38:50
知己知彼,百战不殆1、如果提示缺少参数,如{msg:params error},可尝使用字典模糊测试构造参数,进一步攻击。
逻辑漏洞挖掘技巧
2023-02-02 11:36:32
商户网站接受异部参数的URL对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额、订单信息是否与发起支付时一致,验证正常则对订单进行状态处理或为用户进行网站内入账等。查看配置文件和一些过滤器,看是否对 URL 有相关的筛选操作。除了cookie之外,在请求中可能会带一些参数,细览下可能存在辨别信息的唯一值,来进行测试。
CSRF 防护策略
2021-10-13 07:12:05
什么是 CSRFCSRF:攻击者通过邮件、社区发帖等方式诱导受害者进入第三方网站,并且在第三方网站中向被攻击网站发送跨站请求;这主要是利用了受害者在被攻击网站已经获取的登录凭证,且 cookie 会自动附在对特定域名的请求里的浏览器特性,达到冒充用户对被攻击的网站执行某项操作的目的。
VSole
网络安全专家