伪协议小总结

本文围绕PHP展开,介绍了PHP伪协议,如需开启allow_url_fopen的php://input等,以及data、file、zip、phar协议;还阐述了PHP常用函数,像include、require等函数的作用、使用位置、执行效率及返回值等内容。

一.

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — 安全外壳协议 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

1.php伪协议:访问各个输入输出流

需要开启allow_url_fopen的:php://input、php://stdin、php://memory和php://temp

不需要开启allow_wrl_fopen的:php://filter

在CTF中经常使用的是php://filter和php://input

php://filter用于读取源码,php://input用于执行php代码

php://input需要post请求提交数据

php://filter可以get提交?a=php://filter/read=convert.base64-encode/resource=xxx.php

php://filter:


php://filter是一种元封装器,是PHP中特有的协议流,设计用于数据流打开时的筛选过滤应用,作用是作为一个“中间流”来处理其他流。

php://filter目标使用以下的参数作为它路径的一部分。复合过滤链能够在一个路径上指定

名称
resource=<要过滤的数据流>指定了你要筛选过滤的数据流。必选     
read=<读链的筛选列表>可以设定一个或多个过滤器名称,以管道符分隔可选
write=<写链的筛选列表>可以设定一个或多个过滤器名称,以管道符分隔。可选
<;两个链的筛选列表>
任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。


 

2.data伪协议

data://伪协议,是数据流封装器,和php://相似,都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过包含你输入的payload来实现目的。
格式:?file=data://text/plain,payload ?>

3.file协议

file://用于访问本地文件系统

用法:file:// [文件的绝对路径和文件名]

4.zip://

zip://绝对路径\需要解压缩的文件%23子文件名  

5.phar://

类似zip,与zip协议不同的是zip协议为绝对路径,而phar协议为相对路径。

二.函数

1.include函数


可以放在PHP脚本的任意位置,一般放在流程控制的处理部分中。当PHP脚本执行到include指定引入的文件时,才将它包含并尝试执行。这种方式可以把程序执行时的流程进行简单化。当第二次遇到相同文件时,PHP还是会重新解释一次,include相对于require的执行效率下降很多,同时在引入文件中包含用户自定义函数时,PHP在解释过程中会发生函数重复定义问题。include载入成功后,返回1,失败则返回false。

2.require函数


require函数一般放在PHP脚本的最前面,PHP执行前就会先读入require指定引入的文件,包含并尝试执行引入的脚本文件。require的工作方式是提高PHP的执行效率,当它在同一个网页中解释过一次后,第二次便不会解释。但同样的,正因为它不会重复解释引入文件,所以当PHP中使用循环或条件语句来引入文件时,需要用到include。require载入成功返回1,失败无返回值。

3.include_once和require_once函数


分别与require / include作用相同,不同的是他们在执行到时会先检查目标内容是不是在之前已经导入过,如果导入过了,那么便不会再次重复引入其同样的内容。

4.highlight_file函数


highlight_file() 函数对文件进行语法高亮显示。

语法:highlight_file(filename,return) —— filename:必需。要进行高亮处理的 PHP 文件的路径。return:可选。如果设置 true,则本函数返回高亮处理的代码。

该函数通过使用 PHP 语法高亮程序中定义的颜色,输出或返回包含在 filename 中的代码的语法高亮版本。如果 return 参数被设置为 true,那么该函数会返回被高亮处理的代码,而不是输出它们。否则,若成功,则返回 true,失败则返回 false。

5.show_source函数


该函数是highlight_file函数的别名。

6.file_get_contents()

把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

语法
file_get_contents(path,include_path,context,start,max_length)

7.file函数

file() 函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false。

语法

file(path,include_path,context)

<think> 我们正在处理用户关于PHP伪协议和伪静态的请求。用户希望了解这两个概念的定义、原理、应用等相关信息。我们将根据提供的引用内容,结合相关知识,以清晰的结构组织回答。 首先,我们注意到引用中提供了关于伪静态的信息: - 引用[1]说明伪静态是改变URL表现形式,实际仍是动态页面,但具有类似静态页面的SEO优势。 - 引用[2]提到伪静态在SEO优化中的作用,以及不同服务器环境(独立服务器和虚拟主机)的实现方式。 - 引用[3]解释了伪静态通过URL重写实现,使URL更规范美观,但会降低性能(因为增加了CPU开销)。 - 引用[4]补充了伪静态会增加CPU开销,而真实静态化主要开销在磁盘IO。 关于PHP伪协议,引用[5]提到了“php伪协议分析”,但具体内容不多。因此,我们需要结合其他知识来补充。 下面我们分别介绍伪静态和PHP伪协议: ### 1. 伪静态 **定义**:伪静态是指通过服务器端规则(如URL重写)将动态URL转换为静态形式的技术。虽然URL看起来像静态页面(例如以.html结尾),但实际内容仍是动态生成的。 **原理**: - 通过Web服务器(如Apache的mod_rewrite模块)或应用程序框架的路由机制,将用户请求的静态URL重写为服务器内部可处理的动态URL。 - 例如,用户请求`http://example.com/page/3`,服务器内部将其重写为`http://example.com/index.php?page=3`,然后由PHP脚本处理并返回内容。 **应用**: - **SEO优化**:静态URL更易被搜索引擎抓取和索引(引用[2])。 - **用户友好**:简洁的URL提升用户体验(引用[3])。 - **兼容性**:在不支持生成真静态页面的环境下(如虚拟主机),实现类似静态URL的效果。 **优缺点**: - 优点:改善SEO,提升URL美观度,无需生成大量静态文件(节省存储空间)。 - 缺点:增加服务器CPU负担(每次请求需重写URL并执行动态脚本)(引用[3][4])。 **实现方式**: - **Apache**:使用`.htaccess`文件配置RewriteRule(引用[2])。 - **Nginx**:在配置文件中使用`rewrite`指令。 - **PHP框架**:如Laravel、ThinkPHP等内置路由功能。 ### 2. PHP伪协议 **定义**:PHP伪协议PHP Wrappers)是PHP提供的用于访问不同流资源(如文件、HTTP、FTP等)的封装协议。它们以`<scheme>://...`格式使用,常见于文件处理函数(如`fopen()`、`include()`)。 **原理**: - PHP内置了多种流封装协议,通过特定前缀标识协议类型。当使用这些协议时,PHP会调用对应的流处理器来读写数据。 - 例如:`file://`访问本地文件,`http://`发起HTTP请求,`php://`访问输入/输出流等。 **常见伪协议及用途**: 1. `php://input`:读取POST请求的原始数据(常用于获取未解析的POST体)。 2. `php://output`:直接写入输出缓冲(可用于生成动态文件下载)。 3. `php://filter`:在读写流时应用过滤器(如编码转换),常被用于文件包含漏洞利用(引用[5]间接提及)。 4. `data://`:直接嵌入数据(如`data:text/plain;base64,SSBsb3ZlIFBIUA==`)。 5. `phar://`:访问PHAR(PHP归档)文件内的内容。 **安全风险**: - 部分伪协议(如`php://filter`、`phar://`)可能被恶意利用进行文件包含或反序列化攻击(引用[5]中的“php伪协议分析”可能指此)。 **应用场景**: - **数据处理**:动态读取POST数据(`php://input`)。 - **资源操作**:通过统一接口处理不同来源的数据流(文件、网络等)。 - **调试与测试**:模拟数据流。 ### 对比总结 | **特性** | **伪静态** | **PHP伪协议** | |----------------|-------------------------------|-----------------------------| | **目的** | 优化URL结构,提升SEO | 统一资源访问接口 | | **实现层面** | Web服务器或应用路由 | PHP语言内置协议处理 | | **性能影响** | 增加CPU开销(重写规则+动态处理) | 取决于具体协议(一般无显著开销) | | **典型应用** | 内容管理系统(CMS)、博客 | 文件操作、数据流处理 | §§相关问题§§ 1. 伪静态与真静态网页在性能上有何区别? 2. 如何通过.htaccess文件实现伪静态? 3. PHP伪协议在安全方面有哪些风险? 4. 如何防御利用PHP伪协议的攻击? </think> ### PHP伪协议与伪静态详解 #### 一、伪静态(Pseudo-Static) 1. **定义与原理** 伪静态通过URL重写技术(如Apache的`mod_rewrite`或Nginx的`rewrite`规则)将动态URL转换为静态形式,例如: 原始动态URL:`https://example.com/index.php?page=3` 伪静态URL:`https://example.com/page/3` **核心原理**:服务器内部将静态化URL重定向到对应的动态脚本处理,实际仍是动态页面[^1][^3]。 2. **应用场景** - **SEO优化**:静态URL(如`/news/123.html`)比动态URL(`news.php?id=123`)更易被搜索引擎收录,提升排名[^2]。 - **用户体验**:简洁美观的URL提高用户信任度和分享率(如百度网盘伪静态链接)[^3]。 - **兼容性需求**:虚拟主机用户无法直接生成真静态页时,伪静态是折中方案[^2]。 3. **实现方式** - **独立服务器**:通过`ISAPI_Rewrite`(IIS)或`.htaccess`(Apache)编写规则[^2]。 - **虚拟主机**:依赖程序框架(如WordPress、Discuz!)的路由功能实现[^2]。 ```nginx # Nginx伪静态规则示例 location / { try_files $uri $uri/ /index.php?$query_string; } ``` 4. **优缺点** | **优点** | **缺点** | |------------------------------|-----------------------------------| | 提升SEO效果 | **增加CPU开销**(重写解析消耗资源)| | 隐藏技术细节,增强安全性 | **性能低于真静态**(需动态生成内容)| | 兼容动态功能(如用户登录) | 规则配置复杂,调试困难 | --- #### 二、PHP伪协议PHP Wrappers) 1. **定义与原理** PHP伪协议PHP内置的流处理协议,格式为`<scheme>://...`,用于访问不同数据源(文件/网络/内存等)。常见协议: - `php://input`:读取原始POST数据 - `php://filter`:对流进行过滤处理(如编码转换) - `data://`:直接嵌入数据(如`data:text/plain,Hello`) - `phar://`:访问PHAR归档文件 2. **应用场景** - **数据处理**:通过`php://input`获取未解析的POST数据(如API接收JSON)。 - **文件操作**:用`php://filter`对文件流进行编码: ```php $content = file_get_contents("php://filter/read=convert.base64-encode/resource=config.ini"); ``` - **安全测试**:渗透测试中利用协议读取敏感文件(如`php://filter/resource=/etc/passwd`)[^5]。 3. **安全风险** - **文件包含漏洞**: ```php include($_GET['file']); // 若传入?file=php://filter/convert.base64-encode/resource=index.php ``` 可泄露源码(Base64编码后输出)。 - **远程代码执行**:结合`phar://`触发反序列化漏洞(需依赖`phar`扩展)。 --- #### 三、对比总结 | **特性** | 伪静态 | PHP伪协议 | |----------------|--------------------------------|-------------------------------| | **目的** | URL美化与SEO优化 | 统一资源访问接口 | | **实现层** | Web服务器/应用层路由 | PHP语言内部流处理 | | **性能影响** | 增加CPU开销[^4] | 几乎无额外开销 | | **典型工具** | Apache的mod_rewrite, Nginx规则 | PHP的流包装器函数 | | **安全关注点** | 规则错误导致循环重定向 | 不当使用引发文件包含/代码执行 | #### 四、实践建议 1. **伪静态优化**: - 对高并发站点,用缓存(如Redis)缓解CPU压力[^4]。 - 避免过度重定向,规则需精确匹配(如正则优化)。 2. **伪协议防护**: - 禁用危险协议:在`php.ini`中设置`allow_url_include=Off`。 - 过滤用户输入:避免直接传入`include()`/`file_get_contents()`的参数。 > 提示:伪静态适用于内容型网站(如博客/论坛),而伪协议需谨慎用于数据流处理场景[^1][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值