Разрешить только определенные клиенты для запросов AJAX - PullRequest
1 голос
/ 07 марта 2011

У меня есть интенсивное веб-приложение AJAX, в котором запросы не защищены, что означает отсутствие идентификации клиента. Я не проверяю, выполняет ли мое приложение запрос на сервере.

Недавно я узнал, что кто-то использовал мои URL-адреса ajax-запроса для создания приложения для iPhone, которое имитирует мое веб-приложение. Я добавил фильтр для отклонения запросов от iPhone, посмотрев строку агента пользователя. Это определенно временное решение.

Вместо того, чтобы блокировать определенные пользовательские агенты, как я могу убедиться, что запрос возник из моего приложения? Если я добавлю больше сервисов, таких как приложение FB, гаджет Google и т. Д., Я хочу, чтобы они также отправляли запросы.

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

Ответы [ 5 ]

2 голосов
/ 07 марта 2011

Черт, я бы пошел совсем другим путем.

Скажите создателю приложения для iPhone, что вы будете рады, если он разрешит им продолжать пользоваться вашими услугами за плату. Выберите что-то вроде $ .50 или около того за установку. Таким образом, они могли бы продать приложение в магазине за 0,99 доллара; пусть Apple урезает свои 30%, и вы тоже получите небольшую скидку.

Если у кого-то возникли проблемы с созданием приложения, вы также можете воспользоваться им!

1 голос
/ 07 марта 2011

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

0 голосов
/ 07 марта 2011

Вы можете использовать специальный токен, который вы отправляете вместе со своим ответом, который вы будете искать в вызове AJAX.Это гарантировало бы, что звонящий должен был сначала загрузить вашу веб-страницу.Тем не менее, это по-прежнему не может гарантировать, что пользователь не выходит из приложения iPhone.Приложение может просто обрабатывать ту же информацию и выступать в роли прокси-сервера, и нет способа узнать это на основе HTTP-запросов.

Определены ли на вашем сайте какие-либо условия использования?Если это произойдет, первое, что вы должны сделать, это связаться с Apple и сказать им, что приложение нарушает ваши условия использования, и вы хотите, чтобы приложение было удалено.Если этого не произойдет, вы должны написать некоторые условия использования и связаться с автором приложения, уведомив их об изменениях и попросив их закрыть приложение или прийти к другим условиям.Если ничего не получится, лучше всего просто затруднить прямое использование вызовов AJAX.Простые вещи, такие как запутывание и минимизация JS (и переименование ваших серверных функций, чтобы они не были так хорошо названы) поднимут планку очистки ваших данных.

0 голосов
/ 07 марта 2011

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

0 голосов
/ 07 марта 2011

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

...