也许我有点偏执,但在我重新编写联系人模块时,我想到了以下问题:
我可以在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函数本身不会做任何你不会想到的事情,但你可以期望恶意用户利用你的逻辑.
始终清理您的用户输入.总是.如果您希望仅从一个特定文件夹中获取文件,请不要在输入中允许..或/
它本身看起来相当安全,但它可以用来揭示信息.这可能允许攻击检查的特定文件(如存在(或不存在)/etc/passwd,/proc/*等等).
因此,在此示例中,您应确保$_POST['brochure']首先清理它以仅接受与潜在有效文件名匹配的输入.删除任何包含..或以a开头的输入/.
其他功能可能会产生更糟糕的副作用......
PHP的内置函数不会在错误的输入上做"意外"的事情(例如,file_exists("foo; rm -r /")会说"不,文件'foo; rm -r /'不存在")......如果他们这样做,那就是你可以犯的错误档案反对Zend.
当然,这并不能阻止人们利用你的代码(例如file_exists("../hidden/shell.php")),因此在传递用户提供的输入时你应该(实际上,你应该总是)小心.
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |