程序開發人員通常會把可重復使用的函數寫入到單個文件中,在使用某些函數時,直接調用此文件,而無需再次編寫,這種調用文件的過程一般被稱為包含。程序開發人員都希望代碼更加靈活,所以通常會將被包含的文件設置為變量,用來進行動態調用,但正是由于這種靈活性,從而導致客戶端可以調用一個惡意文件,造成文件包含漏洞。
PHP中提供了四個文件包含的函數,分別是include()、include_once()、require()和require_once(),它們的區別如下:
require找不到被包含的文件時會產生致命錯誤,并停止腳本運行。
include找不到被包含的文件時只會產生警告,腳本將繼續運行。
include_once與include類似,唯一區別是如果該文件中的代碼已經被包含,則不會再次包含。
require_once與require類似,唯一區別是如果該文件中的代碼已經被包含,則不會再次包含。
比如我們看下面這個例子,01.txt是一個正常的文本文件,但文件內容卻是符合PHP語法的代碼:
在02.php文件中包含01.txt,代碼如下:
將這兩個文件都放到D:\AppServ\www目錄,然后在瀏覽器中訪問02.php,可以看到01.txt中的代碼被正確執行了。接下來將02.txt文件的擴展名分別改為jpg、rar、doc、xxx進行測試,發現都可以正確顯示phpinfo信息。由此可知,只要文件內容符合PHP語法規范,那么任何擴展名都可以被PHP解析。
我們再創建一個測試文件03.txt,文件內容是“Hello,world!”,并不符合PHP語法規范,可以發現這種文件可以直接顯示其內容。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。