
本文将介绍一种绕过 Nginx 直接获取客户端 TLS 版本限制的方法,通过客户端 JavaScript 获取 TLS 版本信息,并将其传递给 PHP-FPM 处理。
Nginx 本身无法直接将客户端 TLS 版本信息传递给 PHP-FPM。但我们可以利用客户端 JavaScript 来获取 TLS 版本,然后将该信息通过 GET 或 POST 请求发送到服务器。
具体步骤如下:
-
使用 howsmyssl.com API 获取客户端 TLS 版本。
立即学习“PHP免费学习笔记(深入)”;
howsmyssl.com 提供了一个免费的 API,可以检测客户端使用的 TLS 版本。我们可以通过 JavaScript 调用该 API。
-
在客户端页面中添加以下代码:
这段代码首先定义了一个 parseTLSinfo 函数,该函数作为 howsmyssl.com API 的回调函数。当 API 返回数据时,parseTLSinfo 函数会被调用,并将 TLS 信息作为参数传递给它。
sendTLSInfoToServer 函数负责将 TLS 信息发送到服务器。这里使用了 XMLHttpRequest 对象,将 TLS 信息以 JSON 字符串的形式通过 POST 请求发送到 /your-php-script.php。你需要将 /your-php-script.php 替换为你实际的 PHP 脚本路径。
-
在 PHP 脚本中接收 TLS 信息。
在你的 PHP 脚本 (/your-php-script.php) 中,你需要接收并处理客户端发送的 TLS 信息。
这段 PHP 代码首先使用 file_get_contents('php://input') 获取 POST 请求中的 JSON 数据。然后使用 json_decode 函数将 JSON 数据解码为 PHP 数组。最后,你可以从 $tlsInfo 数组中提取所需的 TLS 信息,例如 TLS 版本和密码套件。
注意事项:
- howsmyssl.com 是一个第三方服务,依赖于其可用性。如果该服务不可用,你的代码将无法获取 TLS 信息。
- 这种方法依赖于客户端 JavaScript 的执行。如果客户端禁用了 JavaScript,或者由于网络问题导致脚本无法加载,你的代码将无法获取 TLS 信息。
- 确保你的 PHP 脚本能够正确处理接收到的 JSON 数据,并进行适当的错误处理。
- 考虑安全因素,例如验证客户端发送的数据,以防止恶意攻击。
总结:
虽然 Nginx 无法直接将客户端 TLS 版本传递给 PHP-FPM,但通过客户端 JavaScript 和第三方 API,我们可以间接获取 TLS 版本信息,并将其传递给服务器进行处理。 这种方法需要在客户端执行 JavaScript,并且依赖于第三方服务的可用性,因此需要根据实际情况进行权衡和选择。











