Любой, кто в этой теме, который предложил посмотреть заголовки, в той или иной мере ошибочен. Все, что содержится в запросе (HTTP_REFERER, HTTP_X_REQUESTED_WITH), может быть подделано злоумышленником, который не является полностью некомпетентным, включая общие секреты [1].
Вы не можете запретить пользователям отправлять HTTP-запрос на ваш сайт. То, что вы хотите сделать, это убедиться, что пользователи должны пройти аутентификацию, прежде чем отправлять запрос на какую-либо чувствительную часть вашего сайта, используя cookie сеанса. Если пользователь делает неаутентифицированные запросы, остановитесь прямо там и дайте им HTTP 403.
Ваш пример делает запрос GET, поэтому, я думаю, вы обеспокоены требованиями к ресурсам запроса [2]. Вы можете сделать некоторые простые проверки работоспособности в заголовках HTTP_REFERER или HTTP_X_REQUESTED_WITH в ваших правилах .htaccess, чтобы остановить появление новых процессов для явно поддельных запросов (или тупых поисковых искателей, которые не будут слушать robots.txt), но если злоумышленники подделывают тем вы захотите, чтобы ваш PHP-процесс завершался как можно раньше для неидентифицированных запросов.
[1] Это одна из основных проблем с клиент-серверными приложениями. Вот почему это не работает: скажите, что у вас есть способ для вашего клиентского приложения аутентифицироваться на сервере - будь то секретный пароль или какой-либо другой метод. Информация, необходимая для приложения, обязательно доступна для приложения (пароль скрыт где-то там или где угодно). Но поскольку он работает на компьютере пользователя, это означает, что они также имеют доступ к этой информации: все, что им нужно, - это посмотреть на источник, или на двоичный, или на сетевой трафик между вашим приложением и сервером, и в конечном итоге они выяснят механизм аутентификации вашего приложения и его тиражирование. Возможно, они даже скопируют его. Может быть, они напишут умный взломать, чтобы ваше приложение сильно поднялось (вы всегда можете просто отправить поддельный пользовательский ввод в приложение). Но как бы то ни было, у них есть вся необходимая информация, и нет способа остановить их от ее использования, что также не помешает вашему приложению иметь ее.
[2] Запросы GET в хорошо спроектированном приложении не имеют побочных эффектов, поэтому никто из них не сможет внести изменения на сервер. Ваши POST-запросы всегда должны быть аутентифицированы с помощью токена CESF, а также только для аутентифицированных пользователей. Если кто-то нападает на это, это означает, что у вас есть учетная запись, и вы хотите закрыть эту учетную запись.
Итак, вы в основном хотите, чтобы ваш скрипт был доступен через AJAX, но не если я набираю URI? –
да, это именно так – jriggs
Есть ли причина, по которой вы не можете использовать .htaccess, описанные в ссылке, которую вы опубликовали? –