$ _SERVER ['HTTP_REFERER'] безопасен?

Я использую $_SERVER ['HTTP_REFERER'] для создания динамической обратной ссылки.

<a href="<?php echo $_SERVER['HTTP_REFERER'] ?>">Return to..blah</a>

Насколько это безопасно?

Ответы

Ответ 1

Не так.

Возможно, он отсутствует. (Возможно, неверно, некоторые личные пакеты брандмауэра запутывают референта по причинам конфиденциальности, нарушая спецификацию HTTP на этом пути)

Вы должны запускать что-либо извне вашей системы через htmlspecialchars для защиты от атак XSS (хотя, IIRC, у реферирования никогда не должно быть опасных символов, поскольку они должны быть безопасными для URL-адресов, которые вы должны придерживаться всегда быть осторожным).

Браузеры поставляются с кнопками с обратной связью, хотя нет необходимости пытаться дублировать их функциональность (особенно, когда с этим, если пользователь нажимает ссылку, помеченную "назад", она не возвращает их в свою историю, поэтому нажмите нормальная кнопка назад концептуально возьмет их вперед).

Ответ 2

Это может быть безопасно, но не является надежным: из-за HTTP spec, HTTP_REFERER is необязательно (некоторые клиенты вообще не отправляют этот заголовок, и некоторое "программное обеспечение безопасности" удаляет это из любого HTTP-запроса), и существует множество способов изменить этот заголовок. Некоторые браузеры отправляют ссылочную страницу, некоторые отправляют пустую строку, некоторые вообще не отправляют ее, некоторые могут отправлять фиктивные данные, некоторые могут отправить тетю Матильду; и, кроме того, вы не можете определить, получаете ли вы данные в этом заголовке или нет.

Итак, нет, я никогда не поверю, что HTTP_REFERER содержит предыдущую страницу, и вы тоже.

Ответ 3

Это не так. Он не может быть установлен, нежелателен или даже небезопасен.

Обратите внимание на следующее:

  • Типы пользователей в вашем URL-адресе и хитах. Не будет реферера. Не только ваша задняя кнопка не будет работать, вы также получите сообщение об ошибке.
  • Посетитель приходит из внешнего источника (скажем, google) на странице вашего продукта. вы хотите отправить своего посетителя в Google? Я так не думаю.
  • Заголовок может быть изменен, я бы попросил его либо дважды проверить его, либо вообще не использовать.