Блокировать прямой доступ к файлу PHP за исключением запроса AJAX?

Я хочу иметь веб-страницу, которая использует AJAX для доступа к файлу PHP в ./ajax/file.ajax.php

Проблема в том, что я не хочу, чтобы люди могли набирать адрес в своем браузере для прямого доступа к этому файлу PHP.

Есть ли способ сделать это так, чтобы только запросы AJAX могли обращаться к файлу?

Есть ли что-то, что я могу проверить в файле PHP, чтобы добиться этого?

Solutions Collecting From Web of "Блокировать прямой доступ к файлу PHP за исключением запроса AJAX?"

Если вы используете jQuery для создания XHR, он установит собственный заголовок X-Requested-With . Вы можете проверить это и определить, как откликнуться на ваш ответ.

 $isXhr = isset($_SERVER["HTTP_X_REQUESTED_WITH"]) AND strotlower($_SERVER["HTTP_X_REQUESTED_WITH"]) == "xmlhttprequest"; 

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

Если вы не используете jQuery или вас не интересует / вы не можете использовать собственные заголовки (чтобы перейти к тому, что предложил alex ), вы можете просто просто POST некоторые данные с помощью вашего запроса Ajax, и в этом конкретном файле проверьте, данные отправлены или нет. Если вы отправляете GET это будет видно в адресной строке, поэтому я предлагаю POST .

 <?php if (empty($_POST['valid_ajax'])) header('Location: /'); ?> 

Это не сложно, так как вы можете обмануть это, предоставив данные ручной работы, однако это лучше, чем ничего, если ваша проблема не такая критическая.