这段代码是否容易受到\ 0 php的影响

时间:2011-10-31 20:52:54

标签: php

我读过关于空字节\ 0并且读到有关file_exists不安全的信息......有人可以告诉我这个代码是否安全:或者我该如何解决?

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

这是_action(“controller”)变量,基本上这就是$ controller被验证的内容:

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

2 个答案:

答案 0 :(得分: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开始执行时,恶意用户都可以操纵事物,以便输出完全不同。

答案 1 :(得分:0)

是的,这非常安全,因为它不能包含/.等特殊字符