我在Stackoverflow上学到了很多东西,这是我最喜欢的编程网站,在这里研究我找到了很多问题的答案。 现在我已经完成了我需要知道的代码:它有任何安全漏洞吗?
它需要从url获取域名,以查看目录中是否存在包含该表达式的var文件并输出其内容。 非常感谢您的帮助!
如果我使用htmlspecialchars和preg_replace清理HTTP_HOST就足够了吗?使用strip_tags会有点矫枉过正,不是吗?从数组中删除这些特殊字符也是多余的,你不觉得吗?
修改:
我将更改代码并为包含文件本身添加保护。非常感谢!
答案 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__指出的那样,你无法以这种或那种方式避免白名单......