Проверка перенаправления / возврата в PHP - PullRequest
3 голосов
/ 07 июня 2011

У меня есть веб-сайт, работающий на PHP, и у меня есть страница (скажем, подтвердите.скажем register.php), могу я узнать, возможно ли добиться этого?

С уважением, Энди.

Ответы [ 5 ]

8 голосов
/ 07 июня 2011

Нельзя полагаться на HTTP REFERER , поскольку пользователи могут манипулировать им, а браузеры могут отказаться от его отправки.

Единственным "безопасным" способом было бы установить переменную сеанса в register.php и проверить, установлена ​​ли эта переменная в verify.php. Как то так:

register.php:

session_start();
$_SESSION['valid_user'] = true;

confirm.php:

session_start();
if(!isset($_SESSION['valid_user'])) {
    die("You did not come from the page i specified!");
}

Однако , это не будет учитываться, если последняя страница была register.php, НО что пользователь был на register.php.

Поскольку HTTP не имеет состояния, вам необходимо отслеживать это на уровне сервера. Если у вас нет аутентифицированного пользователя, для которого вы можете отслеживать все просмотры страниц, это будет очень сложно реализовать. Насколько безопасен действительно он нужен?

1 голос
/ 07 июня 2011

Поскольку HTTP является протоколом без сохранения состояния, вам необходимо хранить информацию о состоянии на стороне сервера.

Один из способов - сохранить ключ в хранилище сеансов PHP, затем передать его во время перенаправления, а затем проверить его еще раз.

register.php

<?php
session_start();

// some other code

$_SESSION['stateKey'] = sha1(time() . mt_rand()); // save a randomly created key

header('Location: confirm.php?key=' . $_SESSION['stateKey']);
?>

confirm.php

<?php
session_start();

if($_SESSION['stateKey'] == $_GET['key']){
    // pass, do things here
}

?>
0 голосов
/ 07 июня 2011

Посмотрите на массив $ _SERVER ['HTTP_REFERREF'] в вашем скрипте, чтобы определить, с какой страницы был запущен этот скрипт

0 голосов
/ 07 июня 2011

использовать

$_SERVER['HTTP_REFERER']

больше информации: здесь

0 голосов
/ 07 июня 2011

используйте: $_SERVER['HTTP_REFERER'] и перенаправьте его с помощью header или какой-либо другой пользовательской функции ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...