php / html - http_referer - PullRequest
       24

php / html - http_referer

6 голосов
/ 03 марта 2009

Я создаю веб-сайт и на одной конкретной странице хочу отправить пользователя обратно на предыдущую страницу. Я довольно новичок в PHP / HTML и использую некоторый существующий код для идей и помощи.

В существующем коде используется следующий метод:

if (! empty($HTTP_REFERER)) 
{
    header("Location: $HTTP_REFERER");
} else 
{
    header("Location: $CFG->wwwroot");
}

Однако, когда я использую этот код, HTTP_referer всегда обрабатывается как пустой и пользователь перенаправляется на корневую страницу. Есть ли явные недостатки в этом коде?

Ответы [ 6 ]

14 голосов
/ 03 марта 2009

Не полагайтесь на HTTP Referrer, являющийся допустимым или даже непустым полем. Люди могут отказаться от этого набора, оставляя любые проверки для этой переменной, идущие в пустую часть предложения IF-ELSE.

Вы можете защититься от этого, отправив параметр в параметрах URL или POST, который будет содержать значение, которое можно использовать для перенаправления пользователя обратно.

13 голосов
/ 03 марта 2009

Вам необходимо использовать:

$_SERVER['HTTP_REFERER']
1 голос
/ 18 августа 2009

isset ($ _ SERVER ['HTTP_REFERER'])? $ _SERVER ['HTTP_REFERER']: '';

1 голос
/ 03 марта 2009

Если вы хотите отправить человека обратно на предыдущую страницу и заставить его работать независимо от того, правильно ли задан реферер, вы можете добавить параметр GET к URL (или POST). Вам нужно будет закодировать URL. Что-то вроде

http://www.domain.com.au/script.php?return=http%3a%2f%2fwww.domain.com.au%2fthis-is-where-i-was%2f

Вы можете использовать функцию PHP urlencode().

0 голосов
/ 03 марта 2009

Вы должны использовать

$_SERVER['HTTP_REFERER']

Однако посмотрите на конфигурацию register_globals в php.ini, она должна быть отключена по соображениям безопасности. Вы можете прочитать больше на сайте PHP Manual .

0 голосов
/ 03 марта 2009

Также обратите внимание, что заголовок реферера может быть пустым или отсутствующим в любом случае, поэтому вам не следует полагаться на него вообще.

...