php - 来自 nginx : should the application use it somehow? 的 $ssl_early_data

标签 php nginx openssl tls1.3

我正准备开启 nginx ssl_early_data使用 TLS 1.3 启用 RTT-0。

我明白,如果我做得不对,重放攻击就成为可能。我知道,为了防止这种情况,您还需要使用 $ssl_early_data

Requests sent within early data are subject to replay attacks. To protect against such attacks at the application layer, the $ssl_early_data variable should be used.

我不明白的是将这个指令放在 nginx 配置中是否足够,或者我服务器上的 PHP 应用程序是否/如何以某种方式使用这个 $ssl_early_data 变量并进行一些额外的检查。

最佳答案

您是正确的,此 header 本身不执行任何操作,您的 PHP 应用程序中需要额外的逻辑。

在我的例子中,我使用的是 fastcgi 变量而不是 header :

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 没有 dentry ,您可以允许这些请求使用 TLS 早期数据。


最后,大多数浏览器尚不支持 HTTP 425 太早,因此我强烈建议返回一个错误页面,告诉他们“刷新并重新提交”表单。

随着浏览器支持的改进,更少的人会看到错误页面,浏览器将透明地处理 425 错误,但我们还没有做到这一点。

“425 太早”目前支持:

  • 火狐 58+

您可以在此处跟踪其他浏览器:

关于php - 来自 nginx : should the application use it somehow? 的 $ssl_early_data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63098503/

相关文章:

nginx - 反向代理背后的 Gitlab Docker 容器

PHP Pear Mail SSL 连接问题

ssl - Cloudflare SSL 第 3 方访问错误

php 记录用 php 编写的应用程序的所有事件

ruby-on-rails - 无法通过Passenger/Nginx 强制Rails 进入生产环境

node.js - 如何使用 Nginx 和 Node.js 应用程序设置 Jenkins

.net - Linux .Net 托管上的 IBM.MQ MQQueueManager 期间安全握手失败

php - 如何获得单词字符的所有唯一组合?

php - 为 php 网站创建一个安全的仅限管理员的部分

c# - 复制PHP的动态多维数组创建