|
一、涉及到的危險(xiǎn)函數(shù)〔include(),require()和include_once(),require_once()〕
include() && require()語(yǔ)句:包括并運(yùn)行指定文件。
這兩種結(jié)構(gòu)除了在如何處理失敗之外完全一樣。include() 產(chǎn)生一個(gè)警告而 require() 則導(dǎo)致一個(gè)致命錯(cuò)誤。換句話(huà)說(shuō),如果你想在遇到丟失文件時(shí)停止處理頁(yè)面就用 require()。include() 就不是這樣,腳本會(huì)繼續(xù)運(yùn)行。
如果"allow_url_fopen"在 php 中被激活(默認(rèn)配置),也可以用 URL(通過(guò) HTTP 或者其它支持的封裝協(xié)議)而不是本地文件來(lái)指定要被包括的文件。如果目標(biāo)服務(wù)器將目標(biāo)文件作為 php 代碼解釋?zhuān)瑒t可以用適用于 HTTP GET 的 URL 請(qǐng)求字符串來(lái)向被包括的文件傳遞變量。
詳細(xì)參考:http://cn.php.NET/manual/en/function.include.php
require_once()?。ΓΑnclude_once()
require_once ()和include_once() 語(yǔ)句在腳本執(zhí)行期間包括并運(yùn)行指定文件。此行為和 require() 語(yǔ)句類(lèi)似,唯一區(qū)別是如果該文件中的代碼已經(jīng)被包括了,則不會(huì)再次包括。適用于在腳本執(zhí)行期間同一個(gè)文件有可能被包括超過(guò)一次的情況下,你想確保它只被包括一次以避免函數(shù)重定義,變量重新賦值等問(wèn)題。
詳細(xì)參考:http://cn.php.NET/manual/en/function.require-once.php
二、為什么要包含文件
程序員寫(xiě)程序的時(shí)候,不喜歡干同樣的事情,也不喜歡把同樣的代碼(比如一些公用的函數(shù))寫(xiě)幾次,于是就把需要公用的代碼寫(xiě)在一個(gè)單獨(dú)的文件里面,比如 share.php,而后在其它文件進(jìn)行包含調(diào)用。在php里,我們就是使用上面列舉的那幾個(gè)函數(shù)來(lái)達(dá)到這個(gè)目的的,它的工作流程:如果你想在 main.php里包含share.php,我將這樣寫(xiě)include("share.php")就達(dá)到目的,然后就可以使用share.php中的函數(shù)了,像這個(gè)寫(xiě)死需要包含的文件名稱(chēng)的自然沒(méi)有什么問(wèn)題,也不會(huì)出現(xiàn)漏洞,那么問(wèn)題到底是出在哪里呢?
有的時(shí)候可能不能確定需要包含哪個(gè)文件,比如先來(lái)看下面這個(gè)文件index.php的代碼:
[code]
if ($_GET
php技術(shù):php 遠(yuǎn)程包含文件漏洞分析第1/6頁(yè),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。