當我使用下面的PHP代碼:PHP回聲,包括
$id = $_GET['page']; $page = include ($id.'.php'); echo $page;
返回$ id.php文件中的代碼,但是有一個「1」追加到它,任何想法,爲什麼這是怎麼回事?
當我使用下面的PHP代碼:PHP回聲,包括
$id = $_GET['page']; $page = include ($id.'.php'); echo $page;
返回$ id.php文件中的代碼,但是有一個「1」追加到它,任何想法,爲什麼這是怎麼回事?
include()
將返回Boolean如果文件被成功列入。然後,您可以回顯出真實值,該值打印爲1
。
注意:從不直接使用用戶提供的數據($ _GET ['page'])在文件系統操作中。這是一個隱藏的安全風險。你至少得到了.php
被追加,所以它不是一個巨大的漏洞,但仍然...不要這樣做。
你不應該回應那樣的頁面。
include()
用於將文檔導入到當前工作文件。
使用$page = include ($id.'.php');
,要指定布爾值$page
這將持有include()
聲明
1
0
但是,你正在使用的方式也不是完全不正確
例如:創建一個頁面Test.php
在年底返回一個值
$ T =「一些文本」; return $ t;
然後,你將能夠使用它呼應
echo include("test.php"); //outputs "some text"
我建議你TEAD的documenation的完整指南
'include()'也可以用來'返回'一個值並賦值。這是有效的代碼,雖然可能被誤導了 – 2012-03-20 17:45:04
@Michael,是的,但只有當被包含的頁面返回一個值。我認爲我應該在回答 – Starx 2012-03-20 17:50:14
中包括這個。我們知道OP沒有看到包含的代碼就不會返回一個值嗎?不,這就是爲什麼我要求從OP得到澄清。 – 2012-03-20 17:52:08
,因爲1爲include()返回代碼,您保存在$ page變量中。
當你做包括(內$ id.php的代碼返回),唯一的「迴響」是印刷是1
是的!當你include
,你只是告訴PHP來解析附加文件。您設置的變量 - $page
- 僅包含include()
函數的返回值。既然它是1,我會說你成功地包含了其他文件。
在相關說明中,基於來自用戶請求的未分析參數包含任意文件通常(意思是幾乎從不)是一個好主意。通過操縱傳遞給腳本的值page
,理論攻擊者可以讓您的機器在系統中執行任何PHP文件 - 這是一個危險的提示!
很可能是因爲include會返回true或false(0或1)。其實你包括頁面內容,然後echo $頁面。這將打印「1」。
希望你明白了。最後不要回顯$頁面。只需使用include。
注入檢測:O – Starx 2012-03-20 17:42:35
請說明 - 你實際上在包含文件的末尾使用'return'調用來將返回值存儲到'$ page'中? – 2012-03-20 17:42:41
http://php.net/manual/en/function.include.php,示例5 – 2012-03-20 17:43:01