2009-02-19 98 views
1

对于一个学校项目,我必须使用PHP生成一个网站,允许用户生成自己的文章或评论新闻或其他文章。我想知道如何最好使用GET函数来显示包含文件中的内容,并对其他包含文件使用get函数,例如开发人员(我)添加到网站的登录页面和其他内容,而不是作为文章但作为链接等任何人有任何建议或良好的教程,他们可以张贴。如何从PHP网站开始?

回答

1

你肯定会想 前消毒任何通过GET参数来在包括文件。通常通过检查有效字符来完成此操作,并且由于它直接从文件系统调用文件,我通常会手动输入有效的导航操作。这不是最优雅的解决方案,但通常是小应用程序最简单和最安全的解决方案。

我通常为此使用大小写开关,但我也看到人们也使用奇特的正则表达式。

线沿线的东西:

if (isset($_GET['nav'])) { 
    switch ($_GET['nav']) { 
     case 'login': 
     case 'logout': 
     case 'article': 
      include($_GET['nav'] . '.php'); 
      break; 
     default: 
      die('Invalid nav parameter'); 
      break; 
    } 
} 
1

轮已经发明,测试,推出了一百万英里:WordPress

+0

我们都在想它...... – cole 2009-02-19 01:06:28

1

这是我用什么...

function safeIncludeFile($path) 
    { 

     $regex = '/[a-z0-9\-_]+/i'; // match only a to z, 0 to 9 and the minus and unscore character. case insensitive. adjust to accommodate your file naming schema. 

     return preg_match($regex, $path); 

    } 

然后做这样的事情

if (isset($_GET['page']) && safeIncludeFile($_GET['page'])) { 
    require PATH_TO_INCLUDES . $_GET['page'] . '.inc.php'; 

} 
0

你也可以有一个充当白名单的阵列

$allowedIncludes = array('home', 'about', 'news'); 

,然后检查请求的页面在那里

if(in_array($_GET['page'], $allowedIncludes)){ 
    include $_GET['page'].'.php'; 
}else{ 
    die('Forbidden!'); 
} 

因此,你不必为“案例”添加到您的交换机每次你添加的东西。