Как проверить, что это просто наше приложение phonegap, получающее доступ к нашему серверному API?

#web-applications #cordova #jquery-mobile

#веб-приложения #кордова #jquery-мобильный

Вопрос:

Мы используем jQuery Mobile и Phonegap для создания приложения для iOS и Android, которое будет показано в двух магазинах. Приложения будут получать данные с удаленного сервера, используя Javascript и ваши типичные вызовы ajax / JSONP.

Мы надеемся каким-то образом аутентифицировать приложение с помощью нашего серверного интерфейса. Обычно вы могли бы ограничить доступ к удаленному API из определенного домена, мы не можем этого сделать, потому что файлы будут храниться локально и использовать file:// протокол, вот почему мы используем JSONP, чтобы избежать той же проблемы с политикой происхождения.

Мы собирались создать строку аутентификации, используя кодовую фразу временную метку DeviceID, зашифровать ее, а затем сделать то же самое на стороне сервера. Вскоре мы поняли, что люди смогут достаточно легко получить доступ к нашим файлам javascript, а запутывание javascript не на 100% безопасно из того, что я прочитал до сих пор.

Есть идеи о том, как ограничить доступ к API только приложением или это просто тот случай, когда мы делаем все возможное и оставляем наш API достаточно открытым?

Спасибо.

Ответ №1:

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

Новая функция в api будет вычислять хэш из заданного начального значения и возвращать его. Тогда вам нужен тот же код на стороне сервера.

Хэша начального значения и соли, тщательно встроенных в собственный код приложения, было бы достаточно.

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

Ответ №2:

Обфускация JavaScript на 0% безопасна; это сдерживающий фактор, а не реальное решение. Вы можете запустить любой уменьшенный / запутанный JavaScript через реверсор и получить полный код. Кроме того, без особых усилий любой может подделать ответы PhoneGap API на информацию об устройстве, поэтому единственным надежным способом избежать этого было бы использовать сертификаты в контейнере приложения для передачи первоначального рукопожатия из приложения. Подход iPhone и Android различается в деталях, но это единственное реальное решение проблемы. Вы могли бы использовать другие подходы, такие как просмотр исходных IP-адресов и проверка, что они от мобильных провайдеров, но это движущаяся цель.

Ответ №3:

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