PHP伪协议
php:// 用来访问输入和输出流(I/O streams)。
输入/输出流也就是「数据流」,数据流可以是某个文件(xx.php)或某个url(http://www.baidu.com)。
php://filter 可以在访问数据流之前进行「过滤」,并指定过滤方式。
php://filter 有4个可用参数:
名称 描述
resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流。
read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称
write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
一、访问数据流
直接「读取」数据源的内容,resource 参数必须位于 php://filter 的末尾,并指定需要过滤筛选的数据流。
1)读取「url形式」的数据流。
#等同于readfile*(‘http://www.baidu.com‘);*
readfile(‘php://filter/resource=http://www.baidu.com‘);
2)读取「文件形式」的数据流。
# 等同于 include(‘hello.php’);
include(‘php://filter/resource=hello.php’);
二、过滤数据流
读取数据源之前,添加「过滤条件」。
1)以「大写字母」读取 http://www.baidu.com页面的全部内容
readfile(“php://filter/read=string.toupper/resource=http://www.baidu.com“);
2)以「小写字母」读取 hello.php文件的全部内容
include(“php://filter/read=string.tolower/resource=hello.php”);
3)将 hello.php文件的内容「base64加密」后读取出来。
include()包含的文件,默认会执行文件中的代码,但加密后的内容不会被执行,而是直接输出在页面中,复制后解密就能拿到被包含文件的内容。
三、多个过滤条件
同时使用「多个过滤条件」时,使用管道符 | 分隔。
1)base64加密并且转换为大写
.
格式二:`/`分隔
convert.iconv./
ex:convert.iconv.utf-8*.utf-16* 的意思就是把文件的字符编码从 utf-8* 转换为 utf-16*
支持的编码字符有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| 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)
|