0

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

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

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

编辑

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

4

2 回答 2

1

No. You should be using a white-list of allowed expressions. For something as dangerous as include you definitely don't want to rely on black-list and simple sanitization.

You would also hardcode which directory contains your PHP files.

于 2013-10-08T19:41:23.680 回答
0

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

$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__ 也指出的那样,您无法以一种或另一种方式避免白名单......

于 2013-10-08T19:49:21.670 回答