包含文件时的安全注意事项

时间:2010-08-14 13:23:41

标签: php security include get

我准备基于$ _GET数组在php中设置请求路由系统。

例如,对于网址?r=login我会使用包含myfiles/".$_GET['r'].".php"; 哪个会自动指向myfiles / login.php

我知道我需要清理get输入,但我担心因为有可能恶意重定向包含。谁能建议如何防止这种情况?我也可以在调用之前检查文件是否存在吗?

我有自己的一些想法,我只是想知道我没有错过任何考虑。

2 个答案:

答案 0 :(得分:5)

最好不要包含通过网址指定的文件。如果您仍想这样做,请使用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 !");
} 

我建议你看看这些相关的安全问题:

答案 1 :(得分:1)

如果可以,请使用白名单。如果你不能,那么:

  • 仅允许使用下划线和字母数字字符
  • 将包含文件放入单独的目录