「作者主頁」:士別三日wyx
「作者簡介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
「推薦專欄」:對網(wǎng)絡(luò)安全感興趣的小伙伴可以關(guān)注專欄《網(wǎng)絡(luò)安全入門到精通》
php:// 用來訪問輸入和輸出流(I/O streams)。
輸入/輸出流也就是「數(shù)據(jù)流」,數(shù)據(jù)流可以是某個文件(xx.php
)或某個url(http://www.baidu.com
)。
php://filter 可以在訪問數(shù)據(jù)流之前進行「過濾」,并指定過濾方式。
php://filter 有4個可用參數(shù):
名稱 | 描述 |
---|---|
resource=<要過濾的數(shù)據(jù)流> |
這個參數(shù)是必須的。它指定了你要篩選過濾的數(shù)據(jù)流。 |
read=<讀鏈的篩選列表> |
該參數(shù)可選??梢栽O(shè)定一個或多個過濾器名稱 |
write=<寫鏈的篩選列表> |
該參數(shù)可選。可以設(shè)定一個或多個過濾器名稱 |
<;兩個鏈的篩選列表> |
任何沒有以 read= 或 write= 作前綴 的篩選器列表會視情況應(yīng)用于讀或?qū)戞湣?/td>
|
提示:read/write參數(shù)不是必須的,可以直接使用過濾器,比如 php://filter/convert.base64-encode/resource=hello.php
一、訪問數(shù)據(jù)流
直接「讀取」數(shù)據(jù)源的內(nèi)容,resource 參數(shù)必須位于 php://filter 的末尾,并指定需要過濾篩選的數(shù)據(jù)流。
1)讀取「url形式」的數(shù)據(jù)流。
<?php
# 指定源文件,實際上沒有應(yīng)用過濾,會直接輸出 http://www.baidu.com網(wǎng)頁的內(nèi)容
# 等同于readfile('http://www.baidu.com');
readfile('php://filter/resource=http://www.baidu.com');
因為沒指定過濾條件彈了幾條告警,不影響執(zhí)行結(jié)果,不用管。
2)讀取「文件形式」的數(shù)據(jù)流。
<?php
# 指定源文件,實際上沒有應(yīng)用過濾,會直接輸出 hello.php文件的內(nèi)容
# 等同于 include('hello.php');
include('php://filter/resource=hello.php');
同樣因為沒指定過濾條件彈了幾條告警,不影響執(zhí)行結(jié)果,不用管。
二、過濾數(shù)據(jù)流
讀取數(shù)據(jù)源之前,添加「過濾條件」。
1)以「大寫字母」讀取 http://www.baidu.com
頁面的全部內(nèi)容
<?php
readfile("php://filter/read=string.toupper/resource=http://www.baidu.com");
2)以「小寫字母」讀取 hello.php
文件的全部內(nèi)容
<?php
include("php://filter/read=string.tolower/resource=hello.php");
- 將
hello.php
文件的內(nèi)容「base64加密」后讀取出來。
include()包含的文件,默認會執(zhí)行文件中的代碼,但加密后的內(nèi)容不會被執(zhí)行,而是直接輸出在頁面中,復(fù)制后解密就能拿到被包含文件的內(nèi)容。
<?php
include("php://filter/read=convert.base64-encode/resource=hello.php");
三、多個過濾條件
同時使用「多個過濾條件」時,使用管道符 | 分隔。
1)base64加密并且轉(zhuǎn)換為大寫
<?php
include('php://filter/read=convert.base64-encode|string.toupper/resource=hello.php');
按照「從左到右」的順序過濾,過濾條件的順序可能會影響過濾的結(jié)果,比如:先轉(zhuǎn)換大寫再過濾的話,輸出的結(jié)果就會變成小寫的base64編碼。
四、過濾并寫入數(shù)據(jù)流
write 參數(shù),過濾指定字符,并將過濾后的結(jié)果「輸出」到指定文件中。
1)過濾字符,并輸出到 result.txt文件中。
<?php
file_put_contents('php://filter/write=string.tolower/resource=result.txt','hello text');
五、過濾器
1、string.rot13
string.rot13 ,PHP4.3.0及以后版本,對數(shù)據(jù)流的內(nèi)容進行「rot13編碼」,等于用str_rot13() 函數(shù)編碼。
ROT13(otate by 13 places)也叫回轉(zhuǎn)13位,是一種替換式密碼。
ROT13會把每一個字母替換成13位之后的字母,也就是把a換成n,b換成o,以此類推;如果超過了26個字母的范圍,就會從開頭重新開始。
ROT13轉(zhuǎn)換對照表 |
---|
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm |
常用方式:rot13編碼讀取文件內(nèi)容后,復(fù)制頁面輸出的編碼后的內(nèi)容,手動用str_rot13()函數(shù)解碼。
# rot13編碼后讀取 hello.php文件的內(nèi)容
include('php://filter/read=string.rot13/resource=hello.php');
# 手動復(fù)制編碼后的結(jié)果,輸出rot13解碼后的內(nèi)容。
print str_rot13("<?cuc
rpub 'uryyb.cuc文件的內(nèi)容:uryyb grfg';");
2、string.toupper
string.toupper,PHP5.0.0及以后版本,將數(shù)據(jù)流轉(zhuǎn)換成「大寫」,類似于 strupper() 函數(shù)。
需要注意的是,string.tuupper不是直接將文件內(nèi)容變成大寫,而是先執(zhí)行文件內(nèi)容,再將執(zhí)行后的結(jié)果轉(zhuǎn)換成大寫。
# string.touper過濾器將 hello.php文件內(nèi)容轉(zhuǎn)換成大寫
include('php://filter/read=string.toupper/resource=hello.php');
echo "\n";
# 手動復(fù)制 hello.php文件內(nèi)容,并使用strtoupper()轉(zhuǎn)換成大寫
echo strtoupper("<?php
echo 'hello.php文件的內(nèi)容:hello test';");
3、string.tolower
string.tolower,PHP5.0.0及以后版本,將數(shù)據(jù)流轉(zhuǎn)換成「小寫」,類似 strtolower()函數(shù)。
和 string.toupper,也是先執(zhí)行文件的內(nèi)容,再將執(zhí)行后的結(jié)果轉(zhuǎn)換成小寫。
4、convert.base64-encode
1)convert.base64-encode,對數(shù)據(jù)流的內(nèi)容進行「base64編碼」,相當于 base64_encode()函數(shù)。
hello.php文件
<?php
echo 'hello.php文件的內(nèi)容:hello test';
filter.php文件
<?php
include('php://filter/read=convert.base64-encode/resource=hello.php');
對 hello.php文件內(nèi)容進行base64編碼
2)編碼后的內(nèi)容可以使用 base64_decode()函數(shù)解碼
print base64_decode('PD9waHANCmVjaG8gJ2hlbGxvLnBocOaWh+S7tueahOWGheWuue+8mmhlbGxvIHRlc3QnOw0KDQoNCg0KDQo=');
5、convert.iconv.*
convert.iconv.*,將數(shù)據(jù)流的內(nèi)容按照「指定字符編碼」來轉(zhuǎn)換,使用格式有兩種:
格式一:.
分隔
convert.iconv.<input-encoding>.<output-encoding>
格式二:/
分隔
convert.iconv.<input-encoding>/<output-encoding>
比如,convert.iconv.utf-8*.utf-16* 的意思就是把文件的字符編碼從 utf-8* 轉(zhuǎn)換為 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)
粉絲福利
評論區(qū)留言即可參與抽獎,下圖9本書中任選一本。文章來源:http://www.zghlxwxcb.cn/news/detail-482091.html
618,清華社 IT BOOK 多得圖書活動開始啦!活動時間為 2023 年 6 月 7 日至 6 月 18 日,清華
社為您精選多款高分好書,涵蓋了 C++、Java、Python、前端、后端、數(shù)據(jù)庫、算法與機器學(xué)習(xí)等多 個 IT
開發(fā)領(lǐng)域,適合不同層次的讀者。全場 5 折,掃碼領(lǐng)券更有優(yōu)惠哦!文章來源地址http://www.zghlxwxcb.cn/news/detail-482091.html
到了這里,關(guān)于PHP偽協(xié)議filter詳解,php://filter協(xié)議過濾器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!