Я использую $ _SERVER ['HTTP_REFERER'] для создания динамической обратной ссылки.
<a href="<?php echo $_SERVER['HTTP_REFERER'] ?>">Return to..blah</a>
Это разумно безопасно?
Не таким образом.
Возможно, это не так. (Возможно, это неверно, некоторые личные пакеты брандмауэра запутывают референта по причинам конфиденциальности, нарушая спецификацию HTTP на этом пути)
Вы должны запускать все, что приходит извне вашей системы через htmlspecialchars
для защиты от атак XSS (хотя, IIRC, у реферирования никогда не должно быть опасных символов, поскольку они должны быть безопасными для URL-адресов, вы должны придерживаться привычки всегда быть осторожными).
Браузеры поставляются с кнопками с обратной связью, хотя нет необходимости пытаться дублировать их функциональность (особенно, когда с этим, если пользователь нажимает ссылку, помеченную «назад», она не возвращает их в свою историю, поэтому нажмите на обычную спину кнопка концептуально возьмет их вперед).
Он может быть безопасным, но он не является надежным : из-за спецификации HTTP HTTP_REFERER
является обязательным (некоторые клиенты вообще не отправляют этот заголовок, а некоторые «защитные» программы удаляют это из любого HTTP-запроса), и есть многочисленные способы изменения этого заголовка. Некоторые браузеры отправляют ссылочную страницу, некоторые отправляют пустую строку, некоторые вообще не отправляют ее, некоторые могут отправлять фиктивные данные, некоторые могут отправить тетю Матильду; и, кроме того, вы не можете определить, получаете ли вы данные в этом заголовке или нет.
Итак, нет, я бы никогда не верил, что HTTP_REFERER
содержит предыдущую страницу, и вы тоже.
Это не. Он не может быть установлен, нежелателен или даже небезопасен.
Учтите следующее: