php的本机函数与未经过滤的输入一起使用有多安全?

jer*_*oen 10 php security

也许我有点偏执,但在我重新编写联系人模块时,我想到了以下问题:

我可以在php的原生函数中使用未过滤的输入吗?

很容易清理东西以放入数据库,输出到屏幕等,但我想知道例如以下语句是否可能是危险的:

    if (file_exists($_POST['brochure'])) {
        // do some stuff
    }
Run Code Online (Sandbox Code Playgroud)

如果某人设法发布到该页面,上述代码是否可以被利用?

上面的代码只是一个例子,我可以想到我在处理表单时使用的其他函数.

编辑:谢谢大家,示例中的file_exists实际上是卫生功能的一部分,但在清理时,正在使用php函数,因此它正在迅速成为一个鸡蛋和鸡蛋的故事:要使用函数,我必须清理,但是清理我必须使用功能.

无论如何,我现在有了一些新鲜的想法.

nic*_*ckf 12

是的.我所要做的就是将"/ etc/passwd"或"includes/dbconnection.php"(或任何内容)发布到您的页面,根据//do some stuff实际情况,我可以删除,修改或读取敏感信息.该file_exists函数本身不会做任何你不会想到的事情,但你可以期望恶意用户利用你的逻辑.

始终清理您的用户输入.总是.如果您希望仅从一个特定文件夹中获取文件,请不要在输入中允许..或/


Aln*_*tak 8

它本身看起来相当安全,但它可以用来揭示信息.这可能允许攻击检查的特定文件(如存在(或不存在)/etc/passwd,/proc/*等等).

因此,在此示例中,您应确保$_POST['brochure']首先清理它以仅接受与潜在有效文件名匹配的输入.删除任何包含..或以a开头的输入/.

其他功能可能会产生更糟糕的副作用......


Dav*_*ver 6

PHP的内置函数不会在错误的输入上做"意外"的事情(例如,file_exists("foo; rm -r /")会说"不,文件'foo; rm -r /'不存在")......如果他们这样做,那就是你可以犯的错误档案反对Zend.

当然,这并不能阻止人们利用你的代码(例如file_exists("../hidden/shell.php")),因此在传递用户提供的输入时你应该(实际上,你应该总是)小心.