2020-09-08 18:54:21
CSRF攻击防范的方法主要包括以下六种:
1. 验证码机制通过要求用户输入动态生成的验证码(如数字、图形或短信验证码),可有效阻止自动化工具发起CSRF攻击。验证码需具备随机性和时效性,且需在用户提交表单时进行验证。此方法适用于高风险操作(如支付、登录),但可能影响用户体验,需权衡安全性与便利性。
2. 请求地址中添加Token并验证服务端生成随机Token(如UUID),将其嵌入表单隐藏字段或URL参数中。客户端提交请求时,服务端需验证Token的合法性(如与会话中的Token比对)。此方法通过“同步令牌”模式确保请求来自合法页面,但需注意Token的生成、存储和传输安全,避免被窃取。
3. HTTP头中自定义属性验证在Ajax请求中添加自定义头部(如X-Requested-With: XMLHttpRequest),服务端通过检查该头部是否存在来识别合法请求。此方法依赖浏览器同源策略,跨域请求无法伪造自定义头部,但仅适用于Ajax场景,且需确保前端代码未被篡改。
4. 验证HTTP Referer字段检查请求头中的Referer字段,确认其来源域名与目标网站一致。若Referer为空或来自非法域名,则拒绝请求。此方法简单易行,但存在局限性:部分浏览器或隐私设置可能隐藏Referer,且攻击者可能通过伪造Referer绕过(需结合其他措施)。
5. 设置SameSite Cookie属性通过设置Cookie的SameSite属性(可选值:Strict、Lax、None),限制跨站请求携带Cookie。Strict完全禁止跨站携带,Lax允许部分安全操作(如导航链接),None需配合HTTPS使用。此方法可有效防御跨站请求伪造,但需注意兼容性(部分旧浏览器不支持)。
6. 双重提交Cookie验证客户端在请求中同时提交Cookie中的Token和表单中的Token,服务端比对两者是否一致。此方法无需依赖会话存储,但需确保Token的生成和传输安全,且需前后端协同实现。双重提交可降低Token泄露风险,但可能增加开发复杂度。
总结:CSRF防范需结合多种方法,根据业务场景选择合适策略。例如,高安全需求场景可组合Token验证、SameSite Cookie和验证码;普通场景可采用Token验证加Referer检查。同时,需定期更新安全策略,应对新型攻击手段。