您是正确的,此标头本身不执行任何操作,您需要在 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”目前支持:
您可以在此处跟踪其他浏览器: