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防御方案
-
验证 HTTP协议的请求头中的 Referer值, 它记录了 HTTP请求的来源地址, 在通常情况该地址是同一个网站地址, 而大部分 CSRF攻击是在其它网站发起的所以 Referer地址也是发起方地址, 所以可以做判断同一个地址请求通过否则拒绝, 或需要允许其它发起地址可以做白名单. 不过事实上, 一些浏览器黑客可以篡改 Referer值, 所以这种方法仍然有问题, 还有有些用户认为这样会侵犯到自己的隐私权, 因此, 会在浏览器设置请求时不再提供 Referer值, 导致即使正常访问服务器也会认为是 CSRF攻击, 且拒绝访问
-
CSRF漏洞是攻击者利用用户存在 Cookie的验证信息来通过安全验证的, 所以我们防御时可以在参数中加入一个随机产生的 token存放于 Session中, 且不存于 Cookie中, 让黑客无法伪造参数, 然后请求时在服务器首先会比对 token是否正确, 如果 token不正确就把此次请求视为 CSRF攻击, 并拒绝该请求. 此种方式比较繁琐, 因为每次请求都需要加 token参数到请求地址中或表单中
-
HTTP 请求头中添加自定义属性的方法来防御 CSRF攻击, 浏览器会阻止向外站发送自定义的请求头, 但是允许向本站通过 XMLHttpRequest的方式发送自定义请求头, 所以网站内所有的请求里使用 XMLHttpRequest类并附加一个自定义请求头 X-Requested-By, 可以把方式[2]的 token值统一放到此属性中传输验证, 在每次请求时如果没有自定义头会认为是 CSRF攻击, 且拒绝访问
如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!