2012-10-25 25 views
0

假設我有一個文本文件。它包含 「有害的:」 這樣的代碼:php變量可以安全地保存有害代碼嗎?

<?php phpinfo(); ?> 

,也可能是別的,SQL注入代碼,HTML鏈接等..

現在,這裏是我的示例腳本:

$content = file_get_contents('harmfullcode.txt'); 

現在顯然$ content變量將存儲有害代碼。

我的問題是,將這些信息存儲在變量中是否安全?

我知道,例如,如果我

echo $content; 

那麼這將是有害的:。

但是,如果我不對變量做任何事情,變量是否可以保存任何類型的有害代碼?

編輯,以使其更清晰:

是什麼這之間的區別?

$content = file_get_contents('harmfullcode.txt'); 
$safevar = removebadstuff($content); 
echo $safevar; 

VS

$content = removebadstuff(file_get_contents('harmfullcode.txt')); 
echo $content; 

第二個例子將其分配給$內容之前將不好的東西...?我對PHP安全性很陌生,試圖理解這個概念。謝謝。

+0

如果沒有輸出或進一步處理該變量,就是爲什麼你在第一時間讀它的問題嗎?我假設你*正在處理這個變量,並且像'echo'一樣,*類型的處理*是知道回答你的問題所必需的。這個變量會發生什麼?知道只有兩種情況沒有發生,但知道發生的情況並不那麼有趣。 – hakre

+0

我編輯過,以使其更清晰。 – user1760417

+0

'removebadstuff'函數保持未定義狀態。它沒有顯示你實際上對數據做了什麼。通常情況下,當* output *時數據被正確編碼,因爲有不同種類的輸出。如果你癱瘓了數據(「刪除不好的東西」),那麼你犯錯的可能性很高。 – hakre

回答

0

哎幾乎相同。在第一個示例中,您可能想要unset$content,因爲第二個示例僅創建局部變量作爲removebadstuff的第一個參數。

請記住,strings in PHP are binary-safe

必讀:The ultimate clean/secure function

+0

非常感謝! :) – user1760417

+0

噢另外1個問題,在unsanitized數組上使用count()可以安全嗎? – user1760417

+0

與其他問題一樣,如果安全或不安全,則不能說。 Sanitzation實際上可能會造成傷害,所以會不安全。無論它攜帶的數據如何,PHP本身都會將任何數組視爲數組。只要它是一個數組,它就是一個數組。請記住,你只是在改變一些數據,你沒有做任何安全或不安全的事情。安全扮演角色的部分通常在您懷疑的其他地方,尤其是當您在廣泛應用這些術語時。 – hakre

0

如果不打印或評估,則可以將它作爲任何字符串變量存儲在變量中。

+0

爲了安全起見,我會清理$ content變量,如$ safevar = removebadstuff($ content);那麼我會回聲$ safevar或做其他事情。我的問題是,在清理變量之前將有害代碼存儲在變量中是否安全。 – user1760417

0

除非有害代碼是針對file_get_contents()或PHP本身的類似功能中的漏洞,否則將其存儲在變量中應該是安全的。輸出它可能是不安全的,並且在其上運行eval當然是一個壞主意。

0

這取決於你如何對待這個變量。

在你的例子中,echo $content;不會有害,它只會顯示有害代碼,而不執行它。

的有害的:例子:

eval($content); 

exec($content); // any System program execution function 

//preg_relace with e modifier, this is deperecated 

// and so on ..... 
+1

回聲仍然可以注入惡意的JavaScript到網頁....只是因爲它不會損害服務器,但只有客戶端的瀏覽器不會使其有害 –