2011-10-31 43 views
0

我讀過關於空字節\ 0並閱讀了關於file_exists不安全......有人可以告訴如果這段代碼是安全的:或者我該如何解決它?這段代碼是否可以運行到 0 php

if (file_exists('controllers/' . $controller . '.php')) 

這是_action(「控制器」)變量,基本上這就是$控制器與驗證:

$_action = ((isset($_GET['r']) && ctype_alnum($_GET['r'])) ? $_GET['r'] : $_default); 
+0

_action = controller? –

+0

是的,我只是從代碼中拿了幾行,我不確定。 – John

回答

2
php > $a = "abc\0def"; 
php > echo strlen($a); 
7 

PHP的是基於libc的,但也比libc的聰明一點,並知道它的串有多長,並且不會注射遭受空。話雖如此,並非所有的PHP擴展都是相同的,有些可能會受到這個問題的困擾,所以你的問題的答案是......「這取決於」。

至於文件存在,它就像你想要的那樣安全。如果您用於生成臨時文件,如:

$tmp_name = "some random value"; 
if (!file_exists($tmp_name)) { 
    file_put_contents($tmp_name, "something very critical"); 
} 

是非常不安全的。在file_exists返回的時間之間的小部分時間內返回一個「nope,文件不存在」,並且每當file_put_contents開始執行時,惡意用戶可以操縱事情,以便輸出到完全不同的地方。

0

是的,這是完全安全的,因爲它不能包含像/特殊字符或.

相關問題