来自$ _GET的安全动态包括

时间:2011-10-01 23:23:20

标签: php security

这是一种安全的方式来包含来自$ _GET参数的页面:

$pg = basename($_GET['pg']);
if (is_file('views/' . $pg . '.php')) {
  require 'views/' . $pg . '.php';
}

我使用basename()清理参数,并且包含的​​所有可能文件都在“views /”子目录中。这似乎很安全,但我想确定。

我想这样做的原因是因为我目前使用mod_rewrite来定义我的所有URL,但我想要一个单一的入口点,而我宁愿继续定义它们而不是使用路由器。所以我有这样的规则:

RewriteRule ^item/(\d+)/?$ index.php?pg=item&id=$1 [L, NC]

我的index.php看起来像这样:

ob_start();

$pg = basename($_GET['pg']);
if (is_file('views/' . $pg . '.php')) {
  require 'views/' . $pg . '.php';
}

$content = ob_get_clean();

require 'template.php';

有什么意见吗?感谢。

1 个答案:

答案 0 :(得分:3)

明智的想法是使用可以包含的白名单文件编写自己的数组。之后,通过$_GET['pg']

检查您的in_array()阵列