关于 CSRF漏洞

CSRF简介

  • CSRF(Cross-site request forgery 跨站请求伪造)又称是 XSRF, 也被称为 "One Click Attack"或 “Session Riding”, 此漏洞是利用了网站对用户的浏览器信任

攻击细节

  • 当用户打开某网站且登录后浏览器会与网站产生一个会话, 用户可以利用自己的账号权限对网站进行一系列操作 如 订单创建, 支付, 取消, 修改信息 等, 攻击者可以预先写好相关请求代码 如 简单超链接形式或 form表单 等, 通过诱骗用户点击或提交, 此时如果会话未过期, 用户便以自己的身份执行了一个非本意的操作, 对网站服务器来讲这个请求是完全合法的, 这样完成一次 CSRF攻击, 可以看出 CSRF攻击是建立在浏览器与 WEB服务器的会话之中的

CSRF漏洞检测

  • 一般使用检测工具扫描 CSRF漏洞, 在通过工具生成攻击代码, 以此尝试 CSRF攻击, 常见的漏洞扫描工具有 AppScan, NetSpark, AWVS, CSRF Request Builder, CSRFTester 等, 攻击代码可以通过 BurpSuite或 CSRFTester工具来生成

CSRF防御方案

  1. 验证 HTTP协议的请求头中的 Referer值, 它记录了 HTTP请求的来源地址, 在通常情况该地址是同一个网站地址, 而大部分 CSRF攻击是在其它网站发起的所以 Referer地址也是发起方地址, 所以可以做判断同一个地址请求通过否则拒绝, 或需要允许其它发起地址可以做白名单. 不过事实上, 一些浏览器黑客可以篡改 Referer值, 所以这种方法仍然有问题, 还有有些用户认为这样会侵犯到自己的隐私权, 因此, 会在浏览器设置请求时不再提供 Referer值, 导致即使正常访问服务器也会认为是 CSRF攻击, 且拒绝访问

  2. CSRF漏洞是攻击者利用用户存在 Cookie的验证信息来通过安全验证的, 所以我们防御时可以在参数中加入一个随机产生的 token存放于 Session中, 且不存于 Cookie中, 让黑客无法伪造参数, 然后请求时在服务器首先会比对 token是否正确, 如果 token不正确就把此次请求视为 CSRF攻击, 并拒绝该请求. 此种方式比较繁琐, 因为每次请求都需要加 token参数到请求地址中或表单中

  3. HTTP 请求头中添加自定义属性的方法来防御 CSRF攻击, 浏览器会阻止向外站发送自定义的请求头, 但是允许向本站通过 XMLHttpRequest的方式发送自定义请求头, 所以网站内所有的请求里使用 XMLHttpRequest类并附加一个自定义请求头 X-Requested-By, 可以把方式[2]的 token值统一放到此属性中传输验证, 在每次请求时如果没有自定义头会认为是 CSRF攻击, 且拒绝访问

如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!

发布了62 篇原创文章 · 获赞 325 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qcl108/article/details/103330964
今日推荐