使用以下代码是否安全:
require($_SERVER['DOCUMENT_ROOT'] . "/pages/" . $_GET['page'] . ".php")
Run Code Online (Sandbox Code Playgroud)
Rok*_*alj 12
不,这不安全.为什么?
因为两个点的序列/../表示一个目录返回,攻击者可能在您的系统中包含任何内容,甚至是上面的内容$_SERVER['DOCUMENT_ROOT'].(在一个不幸的配置中,这意味着秘密/敏感的OS配置文件.)
您必须IF或SWITCH以获取允许的值以防止恶意输入.例:
switch($_GET['page']) {
case 'welcome': $page='welcome';
case 'shop': $page='shop';
default: $page='index';
}
require($_SERVER['DOCUMENT_ROOT'] . "/pages/" . $page . ".php")
Run Code Online (Sandbox Code Playgroud)
还要检查in_array()一下更容易过滤.
这不安全。您可以使用具有允许值的数组。例如
$allowed_pages = array('index', 'test', 'my_page')
if (!in_array($_GET['page'], $allowed_pages)){
echo 'good bye';
die();
} else {
//
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |