使用下面的代码是否安全:
require($_SERVER['DOCUMENT_ROOT'] . "/pages/" . $_GET['page'] . ".php")
最佳答案
不,它不安全。为什么?
因为两个点的序列 /../ 意味着一个目录返回并且攻击者可能包含您系统上的任何内容,甚至高于 $_SERVER['DOCUMENT_ROOT']
. (在一个不幸的配置中,这意味着 secret /敏感的操作系统配置文件。)
您必须使用 IF 或 SWITCH 来获取允许的值以防止恶意输入。示例:
switch($_GET['page']) {
case 'welcome': $page='welcome';
case 'shop': $page='shop';
default: $page='index';
}
require($_SERVER['DOCUMENT_ROOT'] . "/pages/" . $page . ".php")
另请查看 in_array()
以便更轻松地进行过滤。
关于php - 将 "require"与 GET/POST 数据一起使用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11676837/