безопасность — Безопасно передать / получить страницу реферера в PHP через GET?

Я прочитал несколько сообщений, относящихся к перенаправлению на предыдущую страницу при входе пользователя в систему / etc. и большинство упоминало, что получение URL предыдущей страницы через HTTP_REFERRER является ненадежным / небезопасным.

Мой вопрос, могу ли я добавить немного информации в конец URL, скажем, login.php?referrer=main или же login.php?referrer=profи полагаться на такие переменные, чтобы они не были подделаны, CRSF, изменены каким-либо образом?

Будет ли POST лучше / хуже? Есть ли надежный / безопасный способ добиться того, чего я добиваюсь?

По сути, я пытаюсь найти лучший способ получить ссылающуюся страницу в PHP, чтобы ее можно было перенаправить без риска злонамеренных намерений, вызывающих сбои в работе сайта.

ТИА.

РЕДАКТИРОВАТЬ: Сценарий:

Пользователь заходит на страницу комментария, но для того, чтобы оставить комментарий, необходимо войти в систему, поэтому login to comment ссылка будет размещена на странице. Когда пользователь нажимает login to comment ссылка, ее целью будет login.php? comment20303, после посещения страницы входа в систему и предоставления верифицированных учетных данных, они должны быть возвращены на страницу comment20303, с которой они были созданы до входа в систему.

REEDIT: Мой вопрос сводится к тому, добавляет ли URL-адрес перенаправления на страницу входа в систему, получает к нему доступ через GET и повторно использует его, чтобы вернуть их на безопасную исходную страницу? Из комментариев ниже видно, что ответ — нет, не без проверок достоверности.

1

Решение

Часто я помещаю ссылающуюся страницу в скрытое поле в моей форме

<input type="hidden" name="ref" value="login.php"/>

Затем на моей целевой странице я буду использовать реферал с установленными переменными get, чтобы сообщить странице входа в систему, почему она была перенаправлена ​​обратно.

$ref = trim(strip_tags($_POST['ref']));

//something causes an error (incorrect password maybe)======
$error = "true";
$msg = urlencode("Login Incorrect");
//no harm in putting the referring page in the GET but I don't think you need it for a login process.
header('location: '.$ref.'?error='.$error.'&msg='.$msg);
die();

Вернувшись на страницу входа, я обработаю ошибку, если она установлена, которая говорит мне, что я пришел из цели формы, и произошла ошибка

if (isset($_GET['error']) && $_GET['error'] == "true"){
$error = true;
$msg = trim(strip_tags($_GET['msg']));

//Echo out the msg if it is set somewhere in your HTML
}

Я предпочитаю использовать POST при отправке формы. GET проще всего использовать для перенаправления.

РЕДАКТИРОВАТЬ: на основе вашего комментария

  1. пользователь вводит комментарий, и у комментария есть сгенерированный системой идентификатор.
  2. пользователь не аутентифицирован, поэтому перенаправлен на reg / login с идентификатором в URL
  3. пользователь регистрируется / снова авторизуется, передает идентификатор в URL
  4. система аутентифицируется и, поскольку существует $ _GET [‘commentID’], она вставляет запись в БД, связывающую пользователя с комментарием
  5. вернуть пользователя в область редактирования комментария с идентификатором в URL и дескриптором.

Всегда обрезать и раздеть GET

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]