对于学校项目,我必须使用PHP制作一个网站,允许用户生成自己的文章或评论新闻或其他文章。我想知道如何最好使用GET函数在包含文件中显示内容,并将get函数用于其他包含文件,例如登录页面和开发人员(我)添加到网站的其他内容而不是文章但作为链接等任何人都有任何建议或良好的教程,他们可以发布。
答案 0 :(得分:1)
车轮已经发明,测试,滚动了一百万英里:WordPress
答案 1 :(得分: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;
}
}
答案 2 :(得分: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';
}
答案 3 :(得分:0)
您还可以拥有一个充当白名单的数组
$allowedIncludes = array('home', 'about', 'news');
然后检查所请求的页面是否在那里
if(in_array($_GET['page'], $allowedIncludes)){
include $_GET['page'].'.php';
}else{
die('Forbidden!');
}
因此,每次添加内容时都不必在交换机上添加“大小写”。