这是一种安全的方式来包含来自$ _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';
有什么意见吗?感谢。
答案 0 :(得分:3)
明智的想法是使用可以包含的白名单文件编写自己的数组。之后,通过$_GET['pg']
in_array()
阵列