以下包括最佳实践方法和原因?
$page = $_GET['page'];
方法1
$pages = array('home', 'blog', 'about');
if( in_array($page, $pages) )
{
include($page.'.php');
{
else
{
die('Nice Try.');
}
方法2
if($page = 'home'){
include('home.php');
}else if($page = 'blog'){
include('blog.php');
}else if($page = 'about'){
include('about.php');
}
方法3
if(str_replace("http://", "gth://", $page) == $page){
include_once $page;
}else{
die('Nice Try.');
}
或任何其他解决方案?我不喜欢方法1和2,因为每次添加新页面时总是需要更新。
答案 0 :(得分:3)
扩展/维护第一种方式最简单,第二种方式更糟。第三种方式是没办法,因为它依赖于用户输入来要求页面...它将是一个安全漏洞
答案 1 :(得分:2)
我相信第一个是最好的。你可以尝试第二个,但这是为新手。第三个是 BIG NO ,因为任何新鲜的黑客都可以破解你的“if”条件,&更多的漏洞将开始蔓延。
至于你的问题,在向数组添加新页面时,每次创建新页面时,对于第一种方法,我都有一个解决方案: -
假设您将所有新页面放在一个文件夹“abc”中。现在只需编写一个文件代码,以读取该文件夹中存在的所有文件/页面: -
<?php
$page = $_GET['page'];
$pages = array();
/**
* If you are using all the pages existing in the current folder you are in,
* then use the below variable as:-
* $path = ".";
*/
$path = 'abc/'; // Change the Path here, related to this Folder name
$handle = opendir($path);
while (($file = readdir($handle)) !== false) {
$pages[] = $file;
}
closedir($handle);
if( in_array($page, $pages) ) {
include($page.'.php');
}
else {
die('Nice Try.');
}
?>
所以你看到数组被动态填满,而不需要提到你每次创建的所有页面。而您只使用第一种方法。并将包含页面保存在一个单独的文件夹中,您需要每次都将其包含在其他主页中。
希望它有所帮助。