色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP安全-文件系統(tǒng)跨越

瀏覽:94日期:2022-09-12 08:01:32
文件系統(tǒng)跨越

無(wú)論你用什么方法使用文件,你都要在某個(gè)地方指定文件名。在很多情況下,文件名會(huì)作為fopen()函數(shù)的一個(gè)參數(shù),同時(shí)其它函數(shù)會(huì)調(diào)用它返回的句柄:

<?php

$handle = fopen(’/path/to/myfile.txt’, ’r’);

?>

當(dāng)你把被污染數(shù)據(jù)作為文件名的一部分時(shí),漏洞就產(chǎn)生了:

<?php

$handle = fopen('/path/to/{$_GET[’filename’]}.txt', ’r’);

?>

由于在本例中路徑和文件名的前后兩部分無(wú)法由攻擊者所操縱,攻擊的可能性受到了限制。可是,需要緊記的是有些攻擊會(huì)使用NULL(在URL中表示為%00)來(lái)使字符串終止,這樣就能繞過(guò)任何文件擴(kuò)展名的限制。在這種情況下,最危險(xiǎn)的攻擊手段是通過(guò)使用多個(gè)../來(lái)方問(wèn)上級(jí)目錄,以達(dá)到文件系統(tǒng)跨越的目的。例如,想像一下filename的值被指定如下:

http://example.org/file.php?file ... nother/path/to/file

與許多攻擊的情況相同,在構(gòu)造一個(gè)字串時(shí)如果使用了被污染數(shù)據(jù),就會(huì)給攻擊者以機(jī)會(huì)來(lái)更改這個(gè)字串,這樣就會(huì)造成你的應(yīng)用以你不希望方式運(yùn)行。如果你養(yǎng)成了只使用已過(guò)濾數(shù)據(jù)來(lái)建立動(dòng)態(tài)字串的習(xí)慣,就可以防止很多類型包括很多你所不熟悉的漏洞的出現(xiàn)。

由于fopen()所調(diào)用的文件名前導(dǎo)的靜態(tài)部分是/path/to,所以上面的攻擊中向上跨越目錄的次數(shù)比所需的更多。因?yàn)楣粽咴诎l(fā)起攻擊前無(wú)法察看源碼,所以典型的策略是過(guò)多次地重復(fù)../字串。../字串使用太多次并不會(huì)破壞上面的攻擊效果,所以攻擊者沒(méi)有必要猜測(cè)目錄的深度。

在上面的攻擊中使fopen()調(diào)用以你不希望方式運(yùn)行,它簡(jiǎn)化后等價(jià)于:

<?php

$handle = fopen(’/another/path/to/file.txt’, ’r’);

?>

在意識(shí)到這個(gè)問(wèn)題或遭遇攻擊后,很多開(kāi)發(fā)者都會(huì)犯試圖糾正潛在的惡意數(shù)據(jù)的錯(cuò)誤,有時(shí)根本不會(huì)先對(duì)數(shù)據(jù)進(jìn)行檢查。正如第一章所述,最好的方法把過(guò)濾看成檢查過(guò)程,同時(shí)迫使使用者遵從你制定的規(guī)則。例如,如果合法的文件名只包含字母,下面的代碼能加強(qiáng)這個(gè)限制:

<?php

$clean = array();

if (ctype_alpha($_GET[’filename’]))

{

$clean[’filename’] = $_GET[’filename’];

}

else

{

/* ... */

}

$handle = fopen('/path/to/{$clean[’filename’]}.txt', ’r’);

?>

并沒(méi)有必要對(duì)filename值進(jìn)行轉(zhuǎn)義,這是因?yàn)檫@些數(shù)據(jù)中只用在PHP函數(shù)中而不會(huì)傳送到遠(yuǎn)程系統(tǒng)。

basename( )函數(shù)在檢查是否有不必要的路徑時(shí)非常有用:

<?php

$clean = array();

if (basename($_GET[’filename’]) == $_GET[’filename’])

{

$clean[’filename’] = $_GET[’filename’];

}

else

{

/* ... */

}

$handle = fopen('/path/to/{$clean[’filename’]}.txt', ’r’);

?>

這個(gè)流程比只允許文件名是字母的安全性要差了一些,但你不太可能要求那樣嚴(yán)格。比較好的深度防范流程是綜合上面的兩種方法,特別是你在用正則表達(dá)式檢查代碼合法性時(shí)(而不是用函數(shù)ctype_alpha( ))。

當(dāng)文件名的整個(gè)尾部是由未過(guò)濾數(shù)據(jù)組成時(shí),一個(gè)高危漏洞就產(chǎn)生了:

<?php

$handle = fopen('/path/to/{$_GET[’filename’]}', ’r’);

?>

給予攻擊者更多的靈活性意味著更多的漏洞。在這個(gè)例子中,攻擊者能操縱filename參數(shù)指向文件系統(tǒng)中的任何文件,而不管路徑和文件擴(kuò)展名是什么,這是因?yàn)槲募U(kuò)展名是$_GET[’filename’]的一部分。一旦WEB服務(wù)器具有能讀取該文件的權(quán)限,處理就會(huì)轉(zhuǎn)向這個(gè)攻擊者所指定的文件。

如果路徑的前導(dǎo)部分使用了被污染數(shù)據(jù)的話,這一類的漏洞會(huì)變得甚至更加龐大。這也是下一節(jié)的主題。

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 东京一区二区三区高清视频 | 成人在线免费小视频 | 性欧美videos俄罗斯 | 欧美888| 欧美精品首页 | 国产精品高清久久久久久久 | 一区二区3区免费视频 | 国产成人精品日本亚洲语音2 | 国产精品一区久久精品 | 欧美日本一二三区 | 久久成人在线 | 91热国内精品永久免费观看 | 欧美一区二区视频在线观看 | 久久精品视频日本 | a级毛片在线视频免费观看 a级免费 | 久久影院国产 | 久久视频国产 | 114毛片免费观看网站 | 普通话对白国产情侣自啪 | 99精彩视频| 国产成人av在线 | 日韩精品久久久免费观看夜色 | 亚欧毛片 | 久久老司机波多野结衣 | 亚洲国产日产韩国欧美综合 | 在线满18网站观看视频 | 国产a级特黄的片子视频 | 超清国产粉嫩456在线免播放 | 亚洲欧美在线视频免费 | 在线成人播放毛片 | 国产美女一级特黄毛片 | 国产视频手机在线 | 日韩一级片在线免费观看 | 99精品热女视频专线 | 波多野结衣中文在线播放 | 国内精品小视频在线 | 毛片免费观看网址 | 天天做天天爱夜夜大爽完整 | 全部免费a级毛片 | 韩国一级毛片 | 91精品国产手机 |