nanbando / humbug_get_contents
PHP 5.3+ 用于通过 file_get_contents 访问 HTTPS 资源的加密包装
Requires
- php: ^5.3 || ^7.0 || ^7.1 || ^7.2 || ^8.0
- ext-openssl: *
- composer/ca-bundle: ^1.0
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.1
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^4.8 || ^5.7 || ^6.5
README
定义了一个 Humbug\get_contents()
函数,该函数将透明地调用 file_get_contents()
,除非是 HTTPS URI,此时它将注入一个配置以启用所有 PHP 5.3+ 版本上的安全 SSL/TLS 请求。
所有低于 5.6 版本的 PHP 不仅默认禁用了 SSL/TLS 保护,而且还将大多数其他默认选项设置为不安全。这导致了不安全使用 file_get_contents()
来检索 HTTPS 资源的情况,例如 PHAR 文件或 API 请求。没有 SSL/TLS 保护,所有此类请求都容易受到中间人攻击,攻击者可以注入伪造的响应,例如定制的 php 文件或 json 响应。
安装
composer require padraic/humbug_get_contents
使用方法
$content = Humbug\get_contents('https://www.howsmyssl.com/a/check');
您可以在任何可能进行 HTTP 请求的代码位置使用此函数作为 file_get_contents()
的即时替代。
此解决方案最初是在 Composer 安装程序中实现的,因此这是将该代码提取为具有单个函数的独立包的简单提取。它从 Composer 和 Sslurp 中借用函数。
在罕见的情况下,当尝试检索 HTTPS URI 时,此函数会抱怨。这实际上正是目的;)。错误应该有两个原因
- 无法找到有效的 cafile,即您的服务器配置错误或缺少软件包
- 请求的 URI 无法验证,即在浏览器中这将是一个红色的页面警告
任何一种都不是禁用 SSL/TLS 并让最终用户容易受到黑客攻击的理由。解决此类错误;不要忽略或绕过它们。
头部信息
您可以使用以下函数设置请求头部信息,并获取响应头部信息。此支持基于流上下文,但在此作为便利性提供了一些有限的形式。如果您的需求将扩展此功能,您应使用更完整的解决方案,并确保它完全启用并支持 TLS。
// Don't end headers with \r\n when setting via array Humbug\set_headers([ 'Accept-Language: da', 'User-Agent: Humbug', ]); $response = Humbug\get_contents('http://www.example.com');
使用时请求头部信息将被清空,因此您需要在每次 Humbug\get_contents()
调用时重置。
检索最后响应头部的数组
$response = Humbug\get_contents('http://www.example.com'); $headers = Humbug\get_headers();