2011-10-31 24 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

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

相关问题