CSRF 攻击在今天的浏览器里还成立吗?SameSite=Lax 能不能代替 CSRF token?GET 接口为什么不能改状态?这篇用 localhost 与 127.0.0.1 两个站点,在真实的 Chrome 里把攻击一次次打出来,再逐个看防护有没有用。
[SameSite=Lax(显式写明),无 CSRF 防护,自动提交 POST 表单]
服务端是否收到转账请求: True | 请求详情: [{'cookie_user': None, 'method': 'POST', 'sec_fetch_site': 'cross-site', 'status': 401}]
转账是否成功: [] | 余额 1000
[SameSite 未设置(Chrome 当 Lax),无 CSRF 防护,恶意页面自动提交 POST 表单]
服务端是否收到转账请求: True | 请求详情: [{'cookie_user': 'victim', 'method': 'POST', 'sec_fetch_site': 'cross-site', 'status': 200}]
转账是否成功: ['attacker'] | 余额 900
[SameSite 未设置,无 CSRF 防护,恶意页面顶级导航到 GET 转账接口]
服务端是否收到转账请求: True | 请求详情: [{'cookie_user': 'victim', 'method': 'GET', 'sec_fetch_site': 'cross-site', 'status': 200}]
转账是否成功: ['attacker'] | 余额 900
[SameSite=None + Secure,无 CSRF 防护,自动提交 POST 表单]
服务端是否收到转账请求: True | 请求详情: [{'cookie_user': 'victim', 'method': 'POST', 'sec_fetch_site': 'cross-site', 'status': 200}]
转账是否成功: ['attacker'] | 余额 900
[SameSite=None + Secure,开了 CSRFProtect,自动提交 POST 表单]
服务端是否收到转账请求: True | 请求详情: [{'cookie_user': 'victim', 'method': 'POST', 'sec_fetch_site': 'cross-site', 'status': 400}]
转账是否成功: [] | 余额 1000
[SameSite=None + Secure,开了 CSRFProtect,导航到 GET 转账接口]
服务端是否收到转账请求: True | 请求详情: [{'cookie_user': 'victim', 'method': 'GET', 'sec_fetch_site': 'cross-site', 'status': 200}]
转账是否成功: ['attacker'] | 余额 900上一篇:HttpOnly、Secure、SameSite;下一篇:XSS 防护。
第 73 篇看过 Flask-WTF 的 token 校验细节。本篇的六种配置在同一个实验里按顺序列出,右边的分步演示逐个对照。