nanbando/humbug_get_contents

PHP 5.3+ 用于通过 file_get_contents 访问 HTTPS 资源的加密包装

2.0.0 2021-06-23 07:00 UTC

This package is auto-updated.

Last update: 2024-09-23 13:49:07 UTC


README

Package version Build Status Slack License

定义了一个 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();

升级

升级指南

贡献

贡献指南