什么是php伪协议

在 PHP 中,”伪协议”是一种特殊的语法,用于访问不同的资源或执行特定的操作。这些伪协议以 php:// 开头,后面跟着特定的指示符或参数,以实现不同的功能。这些伪协议提供了一种方便的方式来处理各种输入输出操作,而不必依赖于实际的文件或网络资源。

使用伪协议的函数

1. file_get_contents()

  • 用途:读取文件或流内容。
  • 常见伪协议:
    • file://:访问本地文件(默认协议)。
    • php://input:读取原始 HTTP 请求体。
    • php://filter:对资源进行过滤处理。

2. fopen()

  • 用途:打开文件或流。
  • 常见伪协议
    • php://tempphp://memory:临时存储数据。
    • data://:处理 Base64 或 URL 编码数据。

3. include / require

  • 用途:包含并执行 PHP 文件。
  • 常见伪协议:
    • php://filter:用于 LFI(本地文件包含)攻击或绕过限制。
    • data://:直接执行编码后的代码。

4. file()

  • 用途:将文件读取到数组中。
  • 常见伪协议:
    • php://filter:过滤文件内容。

5. readfile()

  • 用途:输出文件内容。
  • 常见伪协议:
    • php://output:直接输出到缓冲区。

6. copy()

  • 用途:复制文件或流。
  • 常见伪协议:
    • php://input:读取 HTTP 请求体并保存到文件。

7. stream_get_contents() / fread()

  • 用途:读取流内容。
  • 常见伪协议:
    • php://memoryphp://temp:操作内存或临时流。

8. file_put_contents()

  • 用途:写入数据到文件或流。

  • 常见伪协议:

    • php://output:直接输出内容。
    1
    2
    file_put_contents('php://output', 'Hello World');

php支持的伪协议

1
2
3
4
5
6
7
8
9
10
11
12
1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址
3 ftp:// — 访问 FTP(s) URLs
4 php:// — 访问各个输入/输出流(I/O streams)
5 zlib:// — 压缩流
6 data:// — 数据(RFC 2397)
7 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档
9 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音频流
12 expect:// — 处理交互式的流

常用伪协议

php://filter

简单通俗的说,这是一个中间件,在读入或写入数据的时候对数据进行处理后输出的一个过程。

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。

例子php://filter/read=convert.base64-encode/resource=index.php

协议参数