什么是csrf攻击
csrf 全称跨站请求伪造(Cross-site request forgery),指的是攻击者携带网站cookie,冒充用户请求的攻击行为。
与 xss攻击 的区别
xss攻击主要指网站被攻击者利用漏洞恶意注入脚本并执行,是一种注入类攻击;csrf 描述的是攻击者携带cookie冒充用户的请求行为,它们属于两种不同维度上的分类。
可以预想的是,如果 xss攻击的执行脚本包含请求服务器的行为,其也会携带用户cookie达到冒充用户请求的行为,这时候也属于 csrf攻击,不过我们一般称这样的情况为 xsrf攻击。
经典的csrf攻击过程
用户C打开a网站,向服务器A发送请求进行登录
登陆验证通过,服务器返回cookieA
cookieA被保存在浏览器中,生命周期默认为浏览器关闭
在浏览器未关闭的情况下(A域名的cookie还在),用户被攻击者诱导打开b网站
在网站b中,向服务器A发送跨域请求
在网站b的请求中浏览器为其自动携带上了服务器A的cookie
服务器A分析请求cookie得到此请求为用户C发起,正确处理网站b的请求
需要明确的是,浏览器设置和携带cookie是根据请求中服务器的域名来设置和获取的,而非请求所在网站域名。所以,用户首次在网站a请求服务器A得到的cookie对应服务器A的域名,在网站b中再次请求时也会携带服务器A域名下的cookie。其实仔细想想,如果cookie对应的是网站请求方的域名,那么一个网站如果请求多个服务器域名的话,那么它们之间的cookie很可能冲突,而且也无法通过cookie来做单点登陆了。
csrf的防范
-
验证 HTTP Referer 字段
HTTP 的 Referer 字段记录了该 HTTP 请求的来源(网址)。通过 HTTP Referer 可以判断请求所在的网址,进而拦截外站的非法请求。
使用这中方式防范 CSRF 的应当注意
-
请求发起者可以设置不携带 Referer,重定向也不会携带 Referer
-
Referer 由浏览器携带,也可能由于浏览器的实现差异导致问题,或者因为浏览器安全漏洞导致被篡改。
-
对于页面请求来说,要注意 Referer 可能是搜索引擎页面
关于 Referer 的知识可以参考阮一峰老师的HTTP Referer 教程
-
使用验证码校验
对于重要操作如支付来说,可以使用验证码验证用户身份。
-
CSRF Token
CSRF 的本质在于盗用用户的 Cookie 信息然后作为用户凭证冒充用户的操作,如果在验证用户流程中多加个 CSRF Token 的验证,判断 Cookie 是否来自用户网站。那么第三网址发起的请求虽然携带 Cookie 但是获取不到用户网站的 CSRF Token,就可以在服务端设置拦截。
CSRF TOken 可以放置在请求参数中,也可以放在自定义 HTTP 头部字段。但是放在请求中可能由于 Get 请求被放置在 URL 中,再跳转第三方网站时被 Referer 携带泄露。所以推荐放在 HTTP 头部字段中
-
双重Cookie
csrf攻击的原因是请求会自动携带 Cookie,我们可以利用 JS 无法获取跨域 Cookie 的同源限制。发送请求时携带 Cookie 参数,服务器端校验开发者携带的 Cookie 和浏览器自动携带的 Cookie 是否一致来判断是否为正常请求。
双重 Cookie 有以下限制
Cookie 二级域名的跨域问题(Domain 设置为主域可能会由于其它子域被攻击而导致安全问题)
无法设置 Cookie 的 HttpOnly
Cookie 导致请求数据加大,资源浪费
-
利用 Cookie 的新属性 SameSite
现代浏览器将 Cookie 的 SameSite 设置为 Lax 其实已经将大部分跨域请求都设置为不再携带 Cookie。当然如果设置为 Strict 就可以完全避免跨域携带 Cookie 了。具体详见做一个真正懂cookie的前端。
使用 SameSite 严格模式的缺点
新标签重新打开也不携带 Cookie,需要用户重复登录
二级域名无法共享 Cookie,需要用户重复登录
-
检测、监控
-
CSRF检测工具:CSRFTester
-
CSRF监控:代理层统一拦截监控
-
防止网站被利用
严格管理所有的上传接口,防止任何预期之外的上传内容(例如HTML)。
添加Header X-Content-Type-Options: nosniff 防止黑客上传HTML内容的资源(例如图片)被解析为网页。
对于用户上传的图片,进行转存或者校验。不要直接使用用户填写的图片链接。
当前用户打开其他用户填写的链接时,需告知风险(这也是很多论坛不允许直接在内容中发布外域链接的原因之一,不仅仅是为了用户留存,也有安全考虑)。
总结
CSRF攻击利用了浏览器跨域自动携带 Cookie 的特点,我们可以从不同维度防范与减少 CSRF攻击的风险。对于前端安全这块,我也是刚刚开始学习和研究,如果有错误的地方,欢迎大家指出。
引流
网络安全工程师(白帽子)企业级学习路线
第一阶段:安全基础(入门)
第二阶段:Web渗透(初级网安工程师)
第三阶段:进阶部分(中级网络安全工程师)
学习资源分享
如果你对网络安全感兴趣,学习资源分享(嘿客入门教程)
如果你对网络安全入门感兴趣,那么你点击这里👉《嘿客&网络安全入门&进阶学习籽源包》
如果你对网络安全感兴趣,学习资源免费分享,保证100%免费!!!(嘿客入门教程)
如果你对网络安全入门感兴趣,那么你需要的话可以
点击这里👉CSDN大礼包:《嘿客&网络安全入门&进阶学习资源包》免费分享
👉网安(嘿客)全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉网安(嘿客红蓝对抗)所有方向的学习路线👈
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉嘿客必备开发工具👈
工欲善其事必先利其器。学习嘿客常用的开发软件都在这里了,给大家节省了很多时间。
这份完整版的网络安全(嘿客)全套学习资料已经上传至CSDN官方,朋友们如果需要点击下方链接也可扫描下方微信二v码获取网络工程师全套资料【保证100%免费】
如果你有需要可以点击👉CSDN大礼包:《嘿客&网络安全入门&进阶学习资源包》免费分享