2012-03-20 188 views
0

當我使用下面的PHP代碼:PHP回聲,包括

$id = $_GET['page']; $page = include ($id.'.php'); echo $page;

返回$ id.php文件中的代碼,但是有一個「1」追加到它,任何想法,爲什麼這是怎麼回事?

+1

注入檢測:O – Starx 2012-03-20 17:42:35

+0

請說明 - 你實際上在包含文件的末尾使用'return'調用來將返回值存儲到'$ page'中? – 2012-03-20 17:42:41

+2

http://php.net/manual/en/function.include.php,示例5 – 2012-03-20 17:43:01

回答

2

include()將返回Boolean如果文件被成功列入。然後,您可以回顯出真實值,該值打印爲1

注意:從不直接使用用戶提供的數據($ _GET ['page'])在文件系統操作中。這是一個隱藏的安全風險。你至少得到了.php被追加,所以它不是一個巨大的漏洞,但仍然...不要這樣做。

2
  • 你不應該回應那樣的頁面。

    include()用於將文檔導入到當前工作文件。

  • 使用$page = include ($id.'.php');,要指定布爾值$page

    這將持有include()聲明

    • 的成功狀態如果頁面加載成功,它給真實的,其數值爲1
    • 如果負載不成功,則發出錯誤,其數值爲0

但是,你正在使用的方式也不是完全不正確

例如:創建一個頁面Test.php在年底返回一個值

$ T =「一些文本」; return $ t;

然後,你將能夠使用它呼應

echo include("test.php"); //outputs "some text" 

我建議你TEAD的documenation的完整指南

+0

'include()'也可以用來'返回'一個值並賦值。這是有效的代碼,雖然可能被誤導了 – 2012-03-20 17:45:04

+0

@Michael,是的,但只有當被包含的頁面返回一個值。我認爲我應該在回答 – Starx 2012-03-20 17:50:14

+0

中包括這個。我們知道OP沒有看到包含的代碼就不會返回一個值嗎?不,這就是爲什麼我要求從OP得到澄清。 – 2012-03-20 17:52:08

1

,因爲1爲include()返回代碼,您保存在$ page變量中。

當你做包括(內$ id.php的代碼返回),唯一的「迴響」是印刷是1

1

是的!當你include,你只是告訴PHP來解析附加文件。您設置的變量 - $page - 僅包含include()函數的返回值。既然它是1,我會說你成功地包含了其他文件。

在相關說明中,基於來自用戶請求的未分析參數包含任意文件通常(意思是幾乎從不)是一個好主意。通過操縱傳遞給腳本的值page,理論攻擊者可以讓您的機器在系統中執行任何PHP文件 - 這是一個危險的提示!

0

很可能是因爲include會返回true或false(0或1)。其實你包括頁面內容,然後echo $頁面。這將打印「1」。

希望你明白了。最後不要回顯$頁面。只需使用include。