我准备在$ _GET数组的基础上建立一个请求路由系统。包含文件时的安全考虑
例如,对于URL ?r=login
我会使用包括myfiles/".$_GET['r'].".php";
这将自动指向myfiles的/ login.php中
我知道我需要消毒获取输入,但我担心,因为它是可能会恶意重定向包含。任何人都可以建议如何防止这一点?在调用它之前,我还可以检查实际存在的文件吗?
我有我自己的一些想法,我只想知道我没有错过任何考虑。
我准备在$ _GET数组的基础上建立一个请求路由系统。包含文件时的安全考虑
例如,对于URL ?r=login
我会使用包括myfiles/".$_GET['r'].".php";
这将自动指向myfiles的/ login.php中
我知道我需要消毒获取输入,但我担心,因为它是可能会恶意重定向包含。任何人都可以建议如何防止这一点?在调用它之前,我还可以检查实际存在的文件吗?
我有我自己的一些想法,我只想知道我没有错过任何考虑。
不包含通过url指定的文件总是一个好主意。如果您仍然想这样做,使用switch
陈述或任何array
过滤的东西,包括你只需要什么:
例1:
$page = $_GET[...];
switch($page){
case 'login': include 'login_page.php'; break;
// and so on
default: die("bye bad guy !");
}
例2:
$page = $_GET[...];
$pages = array('page1.php', 'page2.php', 'page3.php');
if(in_array($page, $pages))
{
include($page);
{
else
{
die("bye bad guy !");
}
我建议你看看这些相关的安全措施:
如果可以的话,使用白名单。如果不能,那么:
如果我设置包括与之前把绝对路径变量,会阻止重定向站点? (我正在考虑将这些包含在Web根目录之上,而不是公开的视图)。 – YsoL8 2010-08-14 14:17:58