2011-03-07 2 views
1

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

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

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

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

+0

Безопасность Ajax не отличается от безопасности отправки синхронной формы; Используйте технику сеанса и IP-регистрации, где вы можете; проверять IP и сеанс на стороне сервера. – vPJ

+0

@vPJ - проверить IP и сеанс против чего? Пока еще нет способа узнать, что «сеанс» не является прокси-сервером, встроенным в iPhone-приложение. – Tony

ответ

0

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

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

+0

Есть ли у вас какие-либо рекомендуемые способы создания токена? –

+0

@ Aravindan The CSRF toekn, упомянутый выше, это именно то, о чем я говорил. – Tony

1

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

0

Это будет сложно, так как в какой-то момент ваш сервер и приложение должны делиться секретом. Этот секрет будет распространяться вместе с приложением и будет доступен для обратной инженерии. Теперь вы можете добавить токен CRSF (см. this wiki) в каждую форму. Распространение приложения, а затем определение его как положительно ваше является нерешенной проблемой AFAIK.

+0

Из любопытства, если это все еще нерешенная проблема, как приложения, такие как GMail, защищают свои запросы ajax? –

+1

В каждом запросе они помещают знак non-aka CSRF. Сервер отправляет браузеру случайное значение, браузер включает это значение в каждый запрос. Эта проблема решена. Они не остановили меня от выяснения их протокола и написания моего собственного клиента GMail - эта проблема не решена AFAIK. –

+0

Интересно. Как я могу создать nonce? MD5, SHA? Любые рекомендации? –

0

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

2

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

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

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

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