PHP伪协议filter详解,php://filter协议过滤器

这篇具有很好参考价值的文章主要介绍了PHP伪协议filter详解,php://filter协议过滤器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

PHP伪协议filter详解,php://filter协议过滤器


php:// 用来访问输入和输出流(I/O streams)。

输入/输出流也就是「数据流」,数据流可以是某个文件(xx.php)或某个url(http://www.baidu.com)。

php://filter 可以在访问数据流之前进行「过滤」,并指定过滤方式。

php://filter 有4个可用参数:

名称 描述
resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流。
read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称
write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称
<;两个链的筛选列表> 任何没有以 read=write= 作前缀 的筛选器列表会视情况应用于读或写链。

提示:read/write参数不是必须的,可以直接使用过滤器,比如 php://filter/convert.base64-encode/resource=hello.php

一、访问数据流

直接「读取」数据源的内容,resource 参数必须位于 php://filter 的末尾,并指定需要过滤筛选的数据流。

1)读取「url形式」的数据流。

<?php
# 指定源文件,实际上没有应用过滤,会直接输出 http://www.baidu.com网页的内容
# 等同于readfile('http://www.baidu.com');
readfile('php://filter/resource=http://www.baidu.com');

因为没指定过滤条件弹了几条告警,不影响执行结果,不用管。

PHP伪协议filter详解,php://filter协议过滤器

2)读取「文件形式」的数据流。

<?php
# 指定源文件,实际上没有应用过滤,会直接输出 hello.php文件的内容
# 等同于 include('hello.php');
include('php://filter/resource=hello.php');

同样因为没指定过滤条件弹了几条告警,不影响执行结果,不用管。

PHP伪协议filter详解,php://filter协议过滤器

二、过滤数据流

读取数据源之前,添加「过滤条件」

1)以「大写字母」读取 http://www.baidu.com页面的全部内容

<?php
readfile("php://filter/read=string.toupper/resource=http://www.baidu.com");

PHP伪协议filter详解,php://filter协议过滤器

2)以「小写字母」读取 hello.php文件的全部内容

<?php
include("php://filter/read=string.tolower/resource=hello.php");

PHP伪协议filter详解,php://filter协议过滤器

  1. hello.php文件的内容「base64加密」后读取出来。
    include()包含的文件,默认会执行文件中的代码,但加密后的内容不会被执行,而是直接输出在页面中,复制后解密就能拿到被包含文件的内容。
<?php
include("php://filter/read=convert.base64-encode/resource=hello.php");

PHP伪协议filter详解,php://filter协议过滤器

三、多个过滤条件

同时使用「多个过滤条件」时,使用管道符 | 分隔。

1)base64加密并且转换为大写

<?php
include('php://filter/read=convert.base64-encode|string.toupper/resource=hello.php');

按照「从左到右」的顺序过滤,过滤条件的顺序可能会影响过滤的结果,比如:先转换大写再过滤的话,输出的结果就会变成小写的base64编码。

PHP伪协议filter详解,php://filter协议过滤器

四、过滤并写入数据流

write 参数,过滤指定字符,并将过滤后的结果「输出」到指定文件中。

1)过滤字符,并输出到 result.txt文件中。

<?php
file_put_contents('php://filter/write=string.tolower/resource=result.txt','hello text');

PHP伪协议filter详解,php://filter协议过滤器

五、过滤器

1、string.rot13

string.rot13 ,PHP4.3.0及以后版本,对数据流的内容进行「rot13编码」,等于用str_rot13() 函数编码。

ROT13(otate by 13 places)也叫回转13位,是一种替换式密码。

ROT13会把每一个字母替换成13位之后的字母,也就是把a换成n,b换成o,以此类推;如果超过了26个字母的范围,就会从开头重新开始。

ROT13转换对照表
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

常用方式:rot13编码读取文件内容后,复制页面输出的编码后的内容,手动用str_rot13()函数解码。

# rot13编码后读取 hello.php文件的内容
include('php://filter/read=string.rot13/resource=hello.php');

# 手动复制编码后的结果,输出rot13解码后的内容。
print str_rot13("<?cuc
rpub 'uryyb.cuc文件的内容:uryyb grfg';");

PHP伪协议filter详解,php://filter协议过滤器

2、string.toupper

string.toupper,PHP5.0.0及以后版本,将数据流转换成「大写」,类似于 strupper() 函数。

需要注意的是,string.tuupper不是直接将文件内容变成大写,而是先执行文件内容,再将执行后的结果转换成大写。

# string.touper过滤器将 hello.php文件内容转换成大写
include('php://filter/read=string.toupper/resource=hello.php');

echo "\n";
# 手动复制 hello.php文件内容,并使用strtoupper()转换成大写
echo strtoupper("<?php
echo 'hello.php文件的内容:hello test';");

PHP伪协议filter详解,php://filter协议过滤器

3、string.tolower

string.tolower,PHP5.0.0及以后版本,将数据流转换成「小写」,类似 strtolower()函数。

和 string.toupper,也是先执行文件的内容,再将执行后的结果转换成小写。

4、convert.base64-encode

1)convert.base64-encode,对数据流的内容进行「base64编码」,相当于 base64_encode()函数。

hello.php文件

<?php
echo 'hello.php文件的内容:hello test';

filter.php文件

<?php
include('php://filter/read=convert.base64-encode/resource=hello.php');

对 hello.php文件内容进行base64编码

PHP伪协议filter详解,php://filter协议过滤器

2)编码后的内容可以使用 base64_decode()函数解码

print base64_decode('PD9waHANCmVjaG8gJ2hlbGxvLnBocOaWh+S7tueahOWGheWuue+8mmhlbGxvIHRlc3QnOw0KDQoNCg0KDQo=');

PHP伪协议filter详解,php://filter协议过滤器

5、convert.iconv.*

convert.iconv.*,将数据流的内容按照「指定字符编码」来转换,使用格式有两种:

格式一:.分隔

convert.iconv.<input-encoding>.<output-encoding> 

格式二:/分隔

convert.iconv.<input-encoding>/<output-encoding>

比如,convert.iconv.utf-8*.utf-16* 的意思就是把文件的字符编码从 utf-8* 转换为 utf-16*

支持的字符编码有:

UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*
ISO-2022-JP
ISO-2022-JP-MS
CP932
CP51932
SJIS-mac (alias: MacJapanese)
SJIS-Mobile#DOCOMO (alias: SJIS-DOCOMO)
SJIS-Mobile#KDDI (alias: SJIS-KDDI)
SJIS-Mobile#SOFTBANK (alias: SJIS-SOFTBANK)
UTF-8-Mobile#DOCOMO (alias: UTF-8-DOCOMO)
UTF-8-Mobile#KDDI-A
UTF-8-Mobile#KDDI-B (alias: UTF-8-KDDI)
UTF-8-Mobile#SOFTBANK (alias: UTF-8-SOFTBANK)
ISO-2022-JP-MOBILE#KDDI (alias: ISO-2022-JP-KDDI)
JIS
JIS-ms
CP50220
CP50220raw
CP50221
CP50222
ISO-8859-1*
ISO-8859-2*
ISO-8859-3*
ISO-8859-4*
ISO-8859-5*
ISO-8859-6*
ISO-8859-7*
ISO-8859-8*
ISO-8859-9*
ISO-8859-10*
ISO-8859-13*
ISO-8859-14*
ISO-8859-15*
ISO-8859-16*
byte2be
byte2le
byte4be
byte4le
BASE64
HTML-ENTITIES (alias: HTML)
7bit
8bit
EUC-CN*
CP936
GB18030
HZ
EUC-TW*
CP950
BIG-5*
EUC-KR*
UHC (alias: CP949)
ISO-2022-KR
Windows-1251 (alias: CP1251)
Windows-1252 (alias: CP1252)
CP866 (alias: IBM866)
KOI8-R*
KOI8-U*
ArmSCII-8 (alias: ArmSCII8)

粉丝福利

评论区留言即可参与抽奖,下图9本书中任选一本。

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,清华
社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多 个 IT
开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!文章来源地址https://www.toymoban.com/news/detail-482091.html

到了这里,关于PHP伪协议filter详解,php://filter协议过滤器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot之过滤器Filter详解及登录校验

    目录 1 快速入门 2.Filter详解 2.1 执行流程 2.2 拦截路径 2.3 过滤器链 3.登录校验-Filter 3.1 分析 3.2 具体流程 3.3 代码实现 什么是Filter? Filter表示过滤器,是 JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能 使用了过滤器

    2024年02月04日
    浏览(30)
  • 详解过滤器Filter和拦截器Interceptor的区别和联系

    目录 前言 区别 联系 过滤器(Filter)和拦截器(Interceptor)都是用于在Web应用程序中处理请求和响应的组件,但它们在实现方式和功能上有一些区别。 1. 实现方式: - 过滤器是基于Servlet规范的组件,通过实现 javax.servlet.Filter接口 来定义。过滤器可以在请求被处理之前和响应被发送

    2024年02月11日
    浏览(37)
  • 一文详解过滤器Filter、拦截器Interceptor和切面Aspect的区别

    目录 Filter过滤器 作用 应用场景 拦截器Interceptor Aspect切片 三者对比 执行顺序 拦截层面 过滤器Filter和拦截器Interceptor的区别 Filter 过滤器它是 JavaWeb 的三大组件之一 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是 JavaEE 的规范 Filter随web应用的启动

    2024年02月04日
    浏览(33)
  • 【Spring】Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    2024年02月13日
    浏览(35)
  • 深入理解PHP+Redis实现布隆过滤器(亿级大数据处理和黑客攻防必备)

    英文名称Bloom Filter,用于判断一个元素是否在一个大数据集合中,如果检测到存在则有可能存在,如果不存在则一定不存在。 Redis官网对于布隆过滤器的说明:https://redis.io/docs/data-types/probabilistic/bloom-filter/ 防止缓存穿透:用于快速判断某个商品数据是否存在于缓存中,如果存

    2024年04月09日
    浏览(35)
  • 认识Filter(过滤器)

    Filter介绍 在计算机编程中,Filter(过滤器)是一种用于对数据流进行处理的软件组件。Filter 的作用是从输入流中获取数据,对其进行处理后再将其写入输出流中。Filter 组件通常用于数据校验、数据转换、数据压缩等方面,以及对网络通信进行处理。在 Web 开发中,Filter 是

    2024年02月02日
    浏览(39)
  • Filter 过滤器

    Filter过滤器介绍 这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理完请求之后,我们的response还是先经过过滤器才能到达我们的客户端,这里我们进行一个代码的演示,看看具体执

    2024年02月02日
    浏览(33)
  • 过滤器Filter

    什么是Filter? Filter表示过滤器,是JavaWeb三大组件(Servlet、FIlter、Listener)之一。 过滤器可以把对资源的请求拦截下来,总而实现一些特殊的功能 使用过滤器后,要想访问web服务器上的资源,必须先经过过滤器,过滤器处理完毕后,才可以访问对应的资源。 过滤器一般完成

    2023年04月12日
    浏览(31)
  • 结果过滤器—MVC项目中结果过滤器(Result Filter)使用

    结果过滤器( ResultFilter ),是对执行的Action结果进行处理的一种AOP思想,适用于任何需要直接环绕 View 或格式化处理的逻辑。结果过滤器可以 替换或更改 Action 结果 。在 IActionResult 执行的前后执行,使用它能够控制Action的执行结果,比如:格式化结果等。需要注意的是,它只

    2024年02月12日
    浏览(33)
  • java过滤器(Filter)

    原文链接: java过滤器(Filter – 编程屋 目录 1 过滤器简介 2 Filter详细介绍 3 Filter的用法 3.1 用法1  3.2 用法2 filter也称之为过滤器,它是javaWeb三大组件之一(Servlet程序、Listener监听器、Filter过滤器) 作用: 既可以对请求进行拦截,也可以对响应进行处理。 常见场景: 权限检

    2024年02月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包