即使使用is_file也包含文件的安全性

时间:2013-10-08 18:26:55

标签: php security include sanitize whitelist

我在Stackoverflow上学到了很多东西,这是我最喜欢的编程网站,在这里研究我找到了很多问题的答案。 现在我已经完成了我需要知道的代码:它有任何安全漏洞吗?

它需要从url获取域名,以查看目录中是否存在包含该表达式的var文件并输出其内容。 非常感谢您的帮助!

如果我使用htmlspecialchars和preg_replace清理HTTP_HOST就足够了吗?使用strip_tags会有点矫枉过正,不是吗?从数组中删除这些特殊字符也是多余的,你不觉得吗?

修改

我将更改代码并为包含文件本身添加保护。非常感谢!

2 个答案:

答案 0 :(得分:1)

没有。您应该使用允许表达式的白名单。对于像include这样危险的东西,你绝对不想依赖黑名单和简单的清理。

您还需要硬编码哪个目录包含您的PHP文件。

答案 1 :(得分:0)

假设您将所有*var.php个文件保存在一个特殊目录中(比如说/var/www/include/vars/),您可以将它们读入一个数组,并将选择限制在该数组的边界内,而不仅仅是{ {1}} ING:

is_file()

请注意,这基本上 是白名单,在评论中提到:如果在$vardir='/var/www/include/vars/'; $varfiles=array(); foreach(scandir($vardir) as $fn) if(($fn!='.')&&($fn!='..')) $varfiles[]="$vardir$fn"; /* Next, do whatever sanitizing you see fit */ if(array_find($fnvar)) include_once $fnvar; 目录中创建新的{xyz}var.php,则实际上是在插入新的$vardir进入白名单。

正如@ack__指出的那样,你无法以这种或那种方式避免白名单......