Строка запроса с динамическим содержимым - PullRequest
0 голосов
/ 13 января 2012

Если у меня есть этот индекс:

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 будет принято.

Можно ли это решить?

Ответы [ 3 ]

5 голосов
/ 13 января 2012

Осторожно!

Разрешение пользователю решать, какой файл включать без проверки, приведет к уязвимости вашего сервера. Они могут указать ваш скрипт на любой секретный файл.

Вы должны ограничить возможности того, что может быть включено, например:

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

Таким образом, они могут читать только те файлы, которые вы поместили в массив.

Редактировать: Также, как и все остальные, вы должны разделять разные пары param = аргумент в URL с помощью & вместо?. ? используется для отделения имени страницы от списка аргументов.

http://example.com/login/?se=change_password&usermail=...
3 голосов
/ 13 января 2012

У вас есть два ? в URL. Несколько параметров должны быть разделены &.

Использование require очень опасно . Читайте о безопасности. Проверьте любой параметр, прежде чем передавать его такой опасной функции, иначе ваш сайт будет взломан в кратчайшие сроки.

2 голосов
/ 13 января 2012

Ссылка неверная, она должна быть «&» вместо «?» после change_password.

$pwrurl = "http://example.com/login/?se=change_password&usermail=".$email."&usercode=".$linkHash;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...