Я хочу иметь веб-страницу, которая использует AJAX для доступа к файлу PHP в ./ajax/file.ajax.php
Проблема в том, что я не хочу, чтобы люди могли набирать адрес в своем браузере для прямого доступа к этому файлу PHP.
Есть ли способ сделать это так, чтобы только запросы AJAX могли обращаться к файлу?
Есть ли что-то, что я могу проверить в файле PHP, чтобы добиться этого?
Если вы используете 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: /'); ?>
Это не сложно, так как вы можете обмануть это, предоставив данные ручной работы, однако это лучше, чем ничего, если ваша проблема не такая критическая.