Как можно защитить свое API, чтобы никто не смог в обход приложения отправлять свои запросы на веб-сервис?
Допустим имеем:
1) Веб-сервис/API (к примеру написанный на PHP) по адресу myapi.com (адрес вымышленный)
2) Андроид приложение, которое общается с нашим веб-сервисом.
К примеру, наше приложение обращается к нашему API для получения информации, к примеру по адресу: http://myapi.com/?action=getnews&limit=5
При фильтрации трафика, можно увидеть по какому адресу приложение получает информацию, и соответственно можно самому слать запрос и читать всю информацию как угодно.
Мы можем посылать еще хэш сумму с солью которая известна только веб-сервису и приложению (md5("getnews5blablabla")), и веб-сервис будет ее проверять на валидность.
К примеру запрос стал таким:
http://myapi.com/?action=getnews&limit=5&hash=efd46105a8915cb92df4641d86eb0505
Таким образом, даже узнав куда слать запросы, надо узнать еще саму соль, чтобы знать как генерируется хэш-сумма и отправлять валидные запросы.
Но с андроидом есть проблема получается, ведь любое приложение можно декомпилировать, и соответственно увидеть каким образом генерируется все запросы и вновь появится возможность подделывать их.
Ответ
Есть вариант завязать аутентификацию на in-app billing через Google Play. То есть делаем так: Публикуем свою прогу в Google Play и регистрируем там managed in-app item Юзер покупает данный item и при покупке пишем в developer payload наш случайный хэш (или ключ) сгенерированный аппой и/или веб сервером Далее перед коннектом с нашим веб API, аппа обязана получить хэш от сервера Google Play и с этим хэшем обратиться к сервису - иначе reject Естественно можно закэшировать хэш, чтобы каждый раз не бегать к Google Play и проч., но это уже детали. Общий смысл в том, что появляется доверенный источник между нашей аппой и веб сервисом, которому оба доверяют. Google Play в общем то подходит для этого, поскольку связка наше приложение - Google Play работает железобетонно и реализовано на уровне системного сервиса Android'а - другое приложение не сможет встроиться в эту связку (вернее можно, но очень и очень сложно)
Комментариев нет:
Отправить комментарий