REQUEST_URI - путь и запрос URI по мере его запроса. Кроме того, $_SERVER['HTTP_REFERER']
содержит значение HTTP request header field Referer, если оно доступно. Таким образом, чтобы проверить оба содержат ли один и тот же путь URI, вы можете сделать это:
if (isset($_SERVER['HTTP_REFERER'])) && parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) === parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH)) {
// Referer existing and its path is equal to the current requested URI path
}
Но причина, почему isset
используется в этом случае, что Referer не всегда передается. В общем, только тогда, когда запрос вызван ссылкой на ссылку или отправкой формы, поле заголовка будет отправлено клиентом. Поэтому вполне вероятно, что это поле заголовка не установлено. Кроме того, его ценность также может быть подделана и, следовательно, не заслуживает доверия, как любая другая информация, поступающая от клиента.
Это также является причиной того, почему вы не должны использовать эту информацию для проверки подлинности запроса. Вместо этого используйте свой собственный authentication tokens.
Это не для обеспечения безопасности. Можете ли вы привести мне пример того, как сделать это «обязательным», чтобы пользователь посетил x.php, прежде чем смог получить доступ к y.php. Даже если они могут обмануть его, это не имеет значения. – Aborted