как предотвратить «ручное выполнение» внешнего скрипта PHP - PullRequest
2 голосов
/ 05 сентября 2011

Проще говоря, я использую внешние скрипты PHP на веб-сайте моего клиента для различных целей, таких как получение результатов поиска, обновление содержимого и т. Д.

Я храню эти скрипты в каталоге:

www.domain.com/scripts/scriptname01.php
www.domain.com/scripts/scriptname02.php
www.domain.com/scripts/scriptname03.php

и т.д ..

Я обычно выполняю их с помощью вызовов jQuery AJAX.

Я пытаюсь найти фрагмент кода, который обнаружит (изнутри),сценарии выполняются из файла через AJAX или вручную через URL пользователем.

ЭТО ВОЗМОЖНО ??

Я искал абсолютно везде и пробовал различные методы, чтобы сделать с $_SERVER [] массив, но все еще не удалось.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

То, что я пытаюсь сделать, это найти фрагмент кода, который обнаружит (изнутри), выполняются ли эти сценарии из файла через AJAX или ВРУЧНУЮ через URL пользователем.

ЭТО ВОЗМОЖНО ??

Нет, не со 100% надежностью. Вы ничего не можете сделать, чтобы помешать клиенту симулировать вызов Ajax.

Однако есть несколько заголовков, которые вы можете проверить, а именно X-Requested-With. Они будут препятствовать тому, чтобы неискушенный пользователь напрямую вызывал ваши URL Ajax. См. Обнаружение URL вызова Ajax

2 голосов
/ 05 сентября 2011

Большинство фреймворков AJAX отправляют заголовок X-Requested-With:.Предполагая, что вы работаете в Apache, вы можете использовать функцию apache_request_headers () , чтобы получить заголовки и проверить их / проанализировать.

Несмотря на это, ничто не мешает кому-то вручную установитьэтот заголовок - нет реального 100% надежного способа обнаружить это, но проверка этого заголовка, вероятно, примерно настолько близка, насколько вы получите.

В зависимости от того, что вам нужно защищать и почему, вы можете подумать о необходимостинекоторая форма аутентификации и / или использование уникальных хеш / сессий PHP, но это может все же быть взломано любым, кто немного знает о Javascript.

Как идея вещей, которые вы можете проверить, если выпроверьте все это перед обслуживанием, которое вы запрашиваете, оно даст определенную степень уверенности (хотя и не так много, ни один, если кто-то намеренно пытается обойти вашу систему):

  • Сохраните уникальный хэш в значении сеанса итребует, чтобы он был возвращен вам с помощью вызова AJAX (в файле cookie или параметре запроса), поэтому можносравните их на стороне сервера, чтобы убедиться, что они совпадают
  • Проверьте, установлен ли заголовок X-Requested-With: и имеет ли оно значение
  • Убедитесь, что заголовок User-Agent: совпадает с заголовкомначало сеанса

Чем больше вещей вы проверяете, тем больше шансов, что злоумышленнику будет скучно и он сдастся, прежде чем он все сделает правильно.Точно так же, чем больше / больше системных ресурсов потребуется для обслуживания каждого запроса ...

1 голос
/ 05 сентября 2011

Нет 100% надежного способа запретить пользователю, если он знает адрес вашего запроса, запускать ваш скрипт.

Вот почему вы должны аутентифицировать каждый запрос к вашему скрипту.Если ваш скрипт должен вызываться только аутентифицированными пользователями, снова проверьте аутентификацию в вашем скрипте.Относитесь к нему так же, как к входящему пользовательскому вводу - проверяйте и дезинфицируйте все.

При редактировании: то же самое можно сказать и о любом сценарии, к которому пользователь может получить доступ через URL.Например, рассмотрим profile.php?userid=3

...