Я прочитал, что проверка заголовка X-Requested-With из запроса ajax является хорошим способом убедиться, что запрос не поступает извне. Как я могу проверить этот заголовок на стороне сервера? и как правильно отреагировать на этот заголовок отсутствует или неправильно (перенаправление, исключение throw, else)?
Вы можете проверить это вот так …
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
Если вы только ожидаете доступа через XHR, то просто exit
если этого заголовка нет.
Примечание . Этот заголовок тривиально для подмены. Не полагайтесь на это ни на что, но похоже, что это произошло от na XHR .
Единственный верный способ гарантировать, что запрос пришел с вашего сайта, а не кто-то другой, – это предоставить уникальному токену пользователю и сохранить его в своем сеансе. В вашем коде, где вы делаете запрос AJAX, вам необходимо передать этот токен обратно, и если он соответствует таковому в их сеансе, вы можете быть уверены, что запрос пришел с вашего сайта.
Дополнительная информация: http://en.wikipedia.org/wiki/Cross-site_request_forgery