$_SERVER ["HTTP_REFERER"] пуст после перенаправления

$_SERVER ["HTTP_REFERER"] пуст после перенаправления

11.09.2013 02:36:57 Просмотров 66 Источник

Я не хочу разрешать пользователям вводить URL-адреса вручную в веб-браузере. Это может привести к хакерским атакам. Поэтому, если HTTP-реферер пуст, он должен перенаправить на домашнюю страницу.

Я пишу этот php-код в индексе веб-приложения drupal.РНР.

if($_SERVER["HTTP_REFERER"] == "")
{
    header("Location:http://mysite.com"); 
}

Проблема в том, что цикл продолжается бесконечно. Он никогда не показывает домашнюю страницу. $_SERVER ["HTTP_REFERER"] всегда пуст.

В Firefox, я получаю ниже ошибку. Страница не перенаправление правильно Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен.

Как ее решить?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/18738898/serverhttp-referer-is-empty-after-redirect#comment27616555_18738898
Любой, кто хочет взломать ваш сайт, может легко подделать Заголовок ссылки, и есть много законных ситуаций, когда этот заголовок не будет отправлен. Откажитесь от этого подхода.
https://stackoverflow.com/questions/18738898/serverhttp-referer-is-empty-after-redirect#comment27616572_18738898
HTTP_REFERER не будет пустым, если "хакеры" запрашивают ваш сайт у своих, поэтому он не спасет вас от" хакерских атак", а также даст вам дополнительную головную боль, согласно вашему сообщению. Подумайте об изменении пути.
https://stackoverflow.com/questions/18738898/serverhttp-referer-is-empty-after-redirect#comment27616592_18738898
Изучите основы веб-безопасности, и вы можете легко решить эту проблему.
https://stackoverflow.com/questions/18738898/serverhttp-referer-is-empty-after-redirect#comment27616788_18738898
ладно. Одно сомнение. Каково будет значение $_SERVER ["HTTP_REFERER"] в индексе.php [после перенаправления из заголовка ("Location: localhost" )]?

Ответы - $_SERVER ["HTTP_REFERER"] пуст после перенаправления / $_SERVER["HTTP_REFERER"] is empty after redirect

Funk Forty Niner

11.09.2013 04:16:43

Код, который вы опубликовали, делает свою работу. Если люди пытаются получить доступ к корню вашего сайта без реферера, конечно, это будет цикл навсегда.

Заменить header("Location:http://mysite.com"); что указывает на другую страницу на вашем сервере header("Location:http://mysite.com/no_referer.php"); и, конечно, создать страницу под названием no_referer.phpс некоторым содержанием в нем говорит им об этом.

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

  1. индекс.php (предполагая, что это то, что ваш индексный файл называется)
  2. добро пожаловать.РНР
  3. no_referer.РНР

Один для индекса, один для приветствия доступа и один для плохого реферера.

Попробуйте это вместо этого и дайте ему условие.

(Внутри вашего индекса.PHP-файл)

<?php
if($_SERVER["HTTP_REFERER"] == "")
{
    header("Location:http://mysite.com/no_referer.php");
exit;
}

else {
    header("Location:http://mysite.com/welcome.php");
exit;   
}
?>

И чтобы проверить с помощью href, используйте следующее и создайте страницу с именем test_referer.php, который будет выступать в качестве вашего index.php-файл.

<a href="referer_test.php">Referer test</a>

Затем скопируйте приведенный выше код (the code that checks for a referer) в файл с именем referer_test.php, и создать другие страницы соответственно называется no_referer.phpи welcome.phpс соответствующим содержимым внутри.

https://stackoverflow.com/questions/18738898/serverhttp-referer-is-empty-after-redirect/18740976#comment45585427_18740976
Там не должно быть трех страниц... После следующего фрагмента кода, Gurunathan может продолжить свою индексную страницу, как обычно: if ($_SERVER["HTTP_REFERER"] =="") {header ("Location: example.com/no_referer.php" ); выход; }
https://stackoverflow.com/questions/18738898/serverhttp-referer-is-empty-after-redirect/18740976#comment103881804_18740976
Иногда реферер не задан вообще, поэтому это приведет к ошибке $_SERVER ["HTTP_REFERER"] =="", это должно быть isset ($_SERVER["HTTP_REFERER"]) && !пустой($_SERVER ["HTTP_REFERER"])
Pablo Pazos

11.11.2019 02:54:11

Правильная проверка должна быть:

if (isset($_SERVER["HTTP_REFERER"]) && !empty($_SERVER["HTTP_REFERER"]))
{
   ... do something with referer
}

Потому что $_SERVER ["HTTP_REFERER"] = = " выдаст ошибку, когда реферер не установлен.

Помочь в развитии проекта:
Закрыть X