2012-10-02 61 views
0

所以我現在正在進入安全問題,我想知道什麼是使腳本安全的完美方法。我有地方在我的代碼這個轉義一個有效的文件名/路徑

$AdditionalPath = preg_replace("/^[A-Za-z0-9._-\/\\]/","",$AdditionalPath); 
require $AdditionalPath."../xdata/php/website_config/mysql.php"; 

$AdditionalPath可能的一切,甚至是惡意代碼,因此我很難自己,我應該讓某些字符成變量,就像A-Za-z0-9./\。我是對的嗎?我也做了正確的這個正則表達式嗎?

謝謝!上運行腳本必須具有可執行權限:

+0

我們不知道您對'$ AdditionalPath'有什麼限制,只是儘量限制。 – Tchoupi

+0

'$ AdditionalPath'可能類似於'big.bobs.viruses.ru/cgibin'。我真的想不出任何可能的方式,這可能是安全的。 – Dan

+0

http://codepad.org/93vpPqy3 – Empeus

回答

1

爲什麼不使用realpath,而不是一個正則表達式:

$file = realpath($AdditionalPath . "../xdata/php/website_config/mysql.php"); 
if(is_readable($file)) 
    require $file; 

更新:

從真實路徑的文件:

注所有 目錄在層次結構中,否則realpath()將返回FALSE。

+0

,這將是安全的嗎? – Empeus

+0

無論你做什麼,realpath返回..真正的道路。由於文件名是實時路徑調用的一部分,因此無法調和。 – JvdBerg

+0

但是像'Dan'這樣的'big.bobs.viruses.ru/cgibin'操作表示它仍然有可能,如果我在...上有'allow_fopen_url',但這是我的主要問題,請停止插入惡意代碼,請在這裏閱讀'http:// blog.itgossips.com/tech/step-by-step-hacking-website-null-byte-picture-upload /'...就像這樣,但是還有更多的例子 – Empeus