我一直在我的网站上使用这个PHP动态包含代码.但我认为这不安全,如何编写更安全,更好的代码来代替这个:
$page = (empty($_GET['page'])) ? '' : $_GET['page'].".html";
if (empty($page))
{
$page = 'index.html';
}
else
{
$page = $page;
}
include($page);
Run Code Online (Sandbox Code Playgroud)
非常感谢你
在安全性方面,总是允许政策是一个糟糕的政策.不要认为请求有效且安全.始终拒绝提前,并使用白名单:
switch($_GET['page']):
case 'page-a': case 'page-b': case 'other-page':
include $_GET['page'] . '.html';
break;
default:
include 'index.php';
endswitch;
Run Code Online (Sandbox Code Playgroud)
如果白名单难以维护,请尝试将可能性缩小到单个路径,使用basename:
$name = basename($_GET['page']);
include 'includes/' . $name . '.html';
Run Code Online (Sandbox Code Playgroud)
这样您就不必担心安全性,只要您保持此目录的所有内容(以及所有包含路径)安全(注意有人可以将受感染的文件上载到该目录).
如果上述操作失败,请尝试使用realpath()并确保该文件位于指定的目录树中.