2013-04-10 1 views
2

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

Если у меня есть некоторые PHP скрипты, которые я использую для AJAX вызовов, есть способ, что я могу предотвратить доступ адресной строки, PHP POST (Curl и т.д.), а также AJAX из вне моего домена (предполагается, что через кросс- ограничения доступа к домену)?

+1

Нет, это невозможно. – meagar

+1

Вы не можете запретить доступ общественности (AJAX или нет) и в то же время разрешить это. –

+0

Итак, любой, кто знает путь к моим скриптам, может использовать AJAX для изменения моей базы данных SQLite? – rtheunissen

ответ

4

Существует NO способа абсолютно безопасно /надежно определить, какую часть браузера приходит запрос из - адресной строки, AJAX. Есть способ определить, что отправляет браузер/curl/etc через заголовок User-Agent (но не надежно)

Быстрое, но гораздо менее надежное решение - проверить следующий заголовок. Большинство браузеров присоединяют его к вызовам AJAX. Обязательно тщательно изучите его и реализуйте.

X-Requested-With: XMLHttpRequest 

ПРИМЕЧАНИЕ: Не доверять клиенту, если ресурс cruicial. Вам лучше реализовать некоторые другие способы фильтрации доступа. Помните, что любой может подделывать заголовки!

0

Вы можете проверить, не является ли запрос не запросом Ajax, и запретить его, но это не очень безопасно из-за того, что заголовки можно манипулировать.

Что вы можете сделать, это заблокировать каждый IP-адрес, кроме IP-адреса, которому разрешен доступ к этим файлам.

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

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

0

Не знаю точно. Однако, косвенно, вы можете это сделать. Передайте уникальный и постоянно изменяющийся параметр (GET или POST), к которому у вас есть доступ как доказательство происхождения. Если в запросе отсутствует эта уникальная переменная, то это не от вас. Подумайте, вне коробки на этом. Может быть, все, что вы хотите, вот некоторые идеи.

1) передать результат математического уравнения в качестве доказательства происхождения. Что-то, что вы можете программно предсказать, но не очевидным для поиска заголовков хакеров. i.e cos($dayOfYear) или даже лучше base64_encode(base64_encode(cos($dayOfYear))).

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

и т.д ..

0

Пытаться поймать, если Исеть SERVER [ «HTTP_ORIGIN»] от доступа к POST, его должен быть идентичен вашему домену. Если это так, то POST генерируется веб-сайтом yourselft, и безопасно его обрабатывать.

+1

Это не очень хороший ответ. Среди других причин, потому что он начинается со слова «Try». Возможно, он сделал разумный комментарий. Я бы посоветовал вам сделать конверсию, пока вы не оседлали градом голосов. –

Смежные вопросы