我正准备开启nginxssl_early_data https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data使用 TLS 1.3 启用 RTT-0。
我知道,如果我做得不对,重放攻击就有可能发生。我明白,为了防止这种情况,您还需要使用$ssl_early_data https://nginx.org/en/docs/http/ngx_http_ssl_module.html#var_ssl_early_data
在早期数据中发送的请求容易受到重放攻击。到
在应用层防范此类攻击,
应使用 $ssl_early_data 变量。
我不明白的是,将此指令放入 nginx 配置中是否就足够了,或者我的服务器上的 PHP 应用程序是否/如何应以某种方式使用此 $ssl_early_data 变量并进行一些额外的检查。
您是对的,该标头本身不执行任何操作,您需要在 PHP 应用程序中添加额外的逻辑。
就我而言,我使用 fastcgi 变量而不是标头:
fastcgi_param TLS_EARLY_DATA $ssl_early_data;
然后在 PHP 中,您需要检查是否存在重放攻击风险的任何请求:
if ($_SERVER['TLS_EARLY_DATA'] === '1') {
http_response_code(425);
exit;
}
您需要对您想要重播保护的所有内容进行此类检查(例如POST /transfer_money
).
虽然您可以将其保留在没有副作用的东西中(例如。GET /account_balance
).
由于攻击者无法解码重播中的有效负载,因此 GET 没有牙齿,您可以允许这些请求使用 TLS 早期数据。
最后,大多数浏览器尚不支持 HTTP 425 Too Early,因此我强烈建议返回一个错误页面,告诉他们“刷新并重新提交”表单。
随着浏览器支持的改进,更少的人会看到错误页面,并且浏览器将透明地处理 425 错误,但我们还没有做到这一点。
“425 Too Early”目前支持:
您可以在此处跟踪其他浏览器:
- Chrome 和朋友 https://bugs.chromium.org/p/chromium/issues/detail?id=789599
- Safari 还没有错误
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)