Dis*_*oat 1 php security get include
我正在设置一个URL,其中的URL将是:
http://example.com/index.php?page=about
Run Code Online (Sandbox Code Playgroud)
实际上,他们将从更简单的URL重写.index.php将包含另一个页面,使用此代码:
if ( isset( $_GET['page'] ) )
{
$page = $_SERVER['DOCUMENT_ROOT'] . '/pages/' . $_GET['page'] . '.php';
if ( is_file( $page ) )
include $page;
else
echo 'That page doesn\'t exist.';
}
Run Code Online (Sandbox Code Playgroud)
假设页面文件夹中的所有内容都非常安全,那么此代码是否安全?我已经防范了众所周知的目录黑客,即使用page=../../.passwd.还有什么我应该留意的吗?
切换案例可能更好
$page_name = $_GET['page'];
switch($page_name) {
case 'about':
$page = $_SERVER['DOCUMENT_ROOT'] . '/pages/about.php';
break;
case 'home': //fall through to default
case default:
$page = $_SERVER['DOCUMENT_ROOT'] . '/pages/home.php';
}
include $page;
Run Code Online (Sandbox Code Playgroud)
这样,没有任何注射问题.
编辑
另一种解决方案是设置一个专门用于处理页面名称转换为地址的类.
class Page {
static private $pages = array ("about", "home");
const DEFAULT_PAGE = "home";
static public function includePage($page_name) {
if (!in_array($page_name, self::$pages)) {
$page_name = self::DEFAULT_PAGE;
}
include ($_SERVER['DOCUMENT_ROOT'] . '/pages/'.$page_name.'.php';);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,这一切都在一个类中进行管理,未来的更改更容易进行,而无需深入研究其他代码
以上编辑以反映请求.