php://filter伪协议?
时间: 2025-07-23 07:52:35 浏览: 0
### ### php://filter 伪协议的使用方法及示例
`php://filter` 是 PHP 提供的一个特殊协议,用于在文件流操作中应用各种过滤器。它允许在读取或写入文件时对内容进行过滤或转换,适用于压缩、加密、解码、字符编码转换等场景。该协议在 CTF 比赛和安全测试中常用于读取 PHP 源码,绕过某些文件读取限制。
#### 使用方法
`php://filter` 的基本语法如下:
```
php://filter/[<过滤器名>:<参数>]/resource=<文件路径>
```
其中 `<过滤器名>` 是可选的,若未指定则默认为 `string.rot13`;`<参数>` 可用于指定编码方式,如 `convert.base64-encode`;`<文件路径>` 是目标文件的路径。
例如,读取 `06.php` 文件的源代码并以 Base64 编码输出:
```
php://filter/convert.base64-encode/resource=06.php
```
此方法常用于绕过 Web 服务器对 `.php` 文件的直接访问限制,通过 Base64 编码方式读取文件内容,再在客户端进行解码。
#### 常见用途与示例
1. **读取 PHP 文件源码**
使用 `php://filter/convert.base64-encode` 可以将目标文件的内容进行 Base64 编码,从而绕过 Web 服务器的文件类型限制。例如:
```http
GET /index.php?page=php://filter/convert.base64-encode/resource=flag.php HTTP/1.1
Host: example.com
```
服务器响应中将包含 Base64 编码的 `flag.php` 文件内容,解码后即可查看源码。
2. **字符编码转换**
`php://filter` 还可用于字符编码转换,例如将文件内容从 UTF-8 转换为 UTF-16:
```
php://filter/convert.iconv.UTF-8.UTF-16/resource=data.txt
```
3. **多层过滤器嵌套**
可以使用多个过滤器进行嵌套处理,例如先进行 Base64 编码,再进行 ROT13 转换:
```
php://filter/convert.base64-encode|convert.string.rot13/resource=data.txt
```
4. **防御绕过与文件包含漏洞利用**
在某些存在本地文件包含(LFI)漏洞的 PHP 应用中,攻击者可通过 `php://filter` 读取敏感文件内容。例如,若应用中存在如下代码:
```php
include($_GET['page'] . '.php');
```
攻击者可构造如下请求读取 `/etc/passwd`:
```http
GET /index.php?page=php://filter/resource=/etc/passwd HTTP/1.1
```
若服务器未正确配置,攻击者即可读取系统文件内容。
#### 安全建议
- **避免直接使用用户输入作为文件路径**:应使用白名单机制控制可包含的文件。
- **禁用危险的伪协议**:在 `php.ini` 中设置 `allow_url_include=Off`,防止远程文件包含。
- **限制文件读取权限**:确保 Web 服务器运行在低权限账户下,避免访问系统敏感文件。
- **输入过滤与编码处理**:对用户输入进行严格校验,避免构造恶意路径。
###
阅读全文
相关推荐


















