具有动态内容的查询字符串

发布于 2024-12-26 13:11:35 字数 505 浏览 1 评论 0原文

如果我有这个索引:

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");
}

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

$pwrurl = "http://example.com/login/?se=change_password?usermail=".$email."&usercode=".$linkHash;

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

这个问题能解决吗?

If I have this index:

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");
}

A link like the following doesn't work:

$pwrurl = "http://example.com/login/?se=change_password?usermail=".$email."&usercode=".$linkHash;

Only something like: http://example.com/login/?se=change_password will be accepted.

Can this be solved?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜巴黎 2025-01-02 13:11:35

提防!

让用户决定包含哪个文件而不进行任何验证会给您的服务器带来漏洞。他们可以将您的脚本指向任何敏感文件。

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

$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");
}

这样它们只能读取您放入数组中的文件。

编辑:此外,就像其他人所说的那样,您应该使用 & 分隔 URL 中的不同 param=argument 对。而不是?这 ?用于将页面名称与参数列表分开。

http://example.com/login/?se=change_password&usermail=...

Beware!

Letting the user decide which file to include without any validation will introduce a vulnerability to your server. They could point your script to any sensitive file.

You should limit the possibilities of what can be included, like this:

$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");
}

This way they can only read the files you put in the array.

Edit: Also, just like everyone else said, you should separate different param=argument pairs in the URL with & instead of ?. The ? is used to separate the page name from the argument list.

http://example.com/login/?se=change_password&usermail=...
北凤男飞 2025-01-02 13:11:35

URL 中有两个 ?。多个参数必须用 & 分隔。

您使用 require非常危险。阅读有关安全的内容。在将任何参数传递给如此危险的函数之前,请先对其进行验证,否则您的网站将立即遭到黑客攻击。

You have two ? in the URL. Multiple parameters have to be separated with &.

Your use of require is very dangerous. Read up on security. Validate any parameter before passing it to such a dangerous function, or your site will be hacked in no time.

半岛未凉 2025-01-02 13:11:35

链接错误,应该是“&”而不是“?”更改密码后。

$pwrurl = "http://example.com/login/?se=change_password&usermail=".$email."&usercode=".$linkHash;

The link is wrong, it should be '&' instead of '?' after change_password.

$pwrurl = "http://example.com/login/?se=change_password&usermail=".$email."&usercode=".$linkHash;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文