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


Security in including file even using is_file

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

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

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

编辑

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

No.您应该使用允许表达式的白名单。对于像include这样危险的事情,您绝对不想依赖黑名单和简单的消毒。

您还将对包含PHP文件的目录进行硬编码。

假设您将所有*var.php文件保存在一个特殊的目录中(假设/var/www/include/vars/(,您可以将它们读入一个数组,并将选择限制在该数组的边界内,而不仅仅是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;

请注意,这本质上是一个白名单,如注释中所述:如果在$vardir目录中创建新{xyz}var.php,则实际上是在白名单中插入一个新条目。

因此,正如@ack__指出的那样,您无法以某种方式避免白名单......