PHP伪协议原理与常见用法详解

咖啡半糖
咖啡半糖
发布时间:2026-10-15| 4人浏览过
原创

本文旨在解释PHP中各类伪协议(如php://input、php://filter、zip://、data://和phar://)的基本原理与典型应用。内容涵盖协议的功能特性、依赖的PHP配置项、具体使用语法以及结合文件包含函数的利用方式,旨在提供清晰的技术参考。

常见PHP伪协议解析

第1步:理解 php://input

php://input 是一个只读的数据流,允许通过 HTTP POST 请求访问原始数据。当 enctype 设置为 multipart/form-data 时,该协议无效;但在 application/x-www-form-urlencoded 等格式下可有效获取 POST 请求体内容。

要正常使用此协议,通常要求 PHP 配置文件 php.ini 中的 allow_url_include 设置为 On。

验证方法

假设存在如下代码片段:

<?php
@include($_GET["file"]);
?>
可通过向服务器发送包含目标代码的 POST 数据,并指定文件参数为 php://input 来触发执行。

第2步:掌握 php://filter

php://filter 是一种元封装器,用于在文件操作(如 readfile()、file_get_contents() 等)读取前对数据进行筛选或转换。常用于读取敏感文件的源代码而避免执行,通常配合编码过滤器(如 base64-encode)使用。

基本语法结构如下:

  • read=<读链筛选列表>:指定过滤操作,例如 convert.base64-encode。
  • resource=<目标文件路径>:指定要处理的资源。

常用示例:
- php://filter/read=convert.base64-encode/resource=index.php
- php://filter/resource=index.php

实践案例

若目标代码为:

<?php
$a = ($_GET["file"]);
echo file_get_contents($a);
?>
传入包含编码参数的 php://filter URL 即可输出经过 Base64 编码的文件内容,防止直接执行代码。

第3步:利用压缩流 (zip://, bzip2://, zlib://)

这组协议用于解析压缩包内的特定文件。以 zip:// 为例,它可以直接读取 ZIP 文件内部的单个文件。需注意,必须是具体的文件被压缩进 ZIP(而非整个文件夹),且 ZIP 文件路径必须为绝对路径。

语法结构通常为:协议 + ## + 绝对路径至压缩包 + # + 内部文件名。

相关变体包括:
- zip://绝对路径/xxx.zip#内部文件
- compress.bzip2://...#...(针对 .bz2 文件)
- compress.zlib://...#...(针对 .gz 文件)

实战演示

若有代码包含外部文件:

<?php
$a = ($_GET["file"]);
include($a);
?>
将恶意代码保存为文本后压缩为 xx.zip,构造类似 zip://绝对路径/xx.zip#payload.php 的 URL 即可调用内部 PHP 脚本。

第4步:内联数据流 data://

data:// 协议允许直接在 URI 中嵌入数据。与 php://input 相比,它更灵活,支持文本类型或直接提供 Base64 编码的数据块。

前置条件:需在 php.ini 中将 allow_url_include 和 allow_url_fopen 均设为 On。

常见使用形式:
- data://text/plain,<?php ... ?>
- data://text/plain;base64,<base64编码字符串>

测试用例

结合文件包含函数:

<?php
$a = ($_GET["file"]);
include($a);
?>
构造 URL 指向 data:// 并附带有效 Payload 即可实现远程逻辑执行。

第5步:探索 phar:// 协议

phar:// 专门用于解析 PHP 归档文件。由于其内部同样兼容 ZIP 结构的存储规则,故在解析某些旧版打包内容时具备特殊能力。该协议在处理对象反序列化时表现尤为突出。

标准路径格式:phar://绝对路径/to/file.phar/内部目标文件.ext

以上就是关于PHP中各主流伪协议基本原理与应用方式的详细内容,更多关于PHP安全特性及相关漏洞防范的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。