查询包含动态内容的字符串

dan*_*l__ 0 php hyperlink query-string

如果我有这个索引:

if (isset($_GET['se'])) {
    $se= $_GET['se'];

    if (file_exists("{$se}.php")){
        require("{$se}.php");
    }
    else {
        require("page_error.php");
    }
}
else {
    require("page_error.php");
}
Run Code Online (Sandbox Code Playgroud)

像下面这样的链接不起作用:

$pwrurl = "http://example.com/login/?se=change_password?usermail=".$email."&usercode=".$linkHash;
Run Code Online (Sandbox Code Playgroud)

只有这样的东西http://example.com/login/?se=change_password才会被接受.

这可以解决吗?

Seb*_*oli 5

谨防!

让用户决定在没有任何验证的情况下包含哪个文件会给您的服务器带来漏洞.他们可以将您的脚本指向任何敏感文件.

您应该限制可以包含的内容的可能性,如下所示:

$allowed_files = array(
    "page_error",
    "some_section",
    "some_other_section",
    "change_password"
    );

$se = empty($_GET['se']) ? "page_error" : $_GET['se'] ; // "page_error" by default.

if (in_array($se, $allowed_files)){
    require("{$se}.php");
} else {
    require("page_error.php");
}
Run Code Online (Sandbox Code Playgroud)

这样他们只能读取你放在数组中的文件.

编辑:另外,就像其他人说的那样,你应该在URL中用&而不是?分隔不同的param =参数对.的?用于将页面名称与参数列表分开.

http://example.com/login/?se=change_password&usermail=...
Run Code Online (Sandbox Code Playgroud)