2016-07-27 3 views
0

Я пишу мобильное приложение Ionic, которое отправляет HTTP-запросы на сервлет Java. URL-адреса запроса HTTP содержат информацию о пользователе и будут использоваться для обновления базы данных. Однако я не хочу, чтобы кто-то, кроме моих пользователей приложений, просто испортил мою базу данных, отправив HTTP-запросы из внешних источников. Пользователь не должен входить в систему, чтобы использовать мое приложение, поэтому я не смог проверить, кто отправляет запросы. Единственное решение, о котором я думал до сих пор, - это отправить ключ вместе с запросом, который затем будет проверен на сервлете. Однако этот жесткий путь далеко не удовлетворительный. Что было бы лучше? Или я неправильно подключаюсь к бэкенду? Я открыт для всех предложений.Ограничение доступа к Java-сервлету

ответ

1

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

0

По моему опыту, отправка секретности клиента в заголовке вашего сервлета, а затем проверка того, что этот секрет действителен, - это хороший способ продолжить это.

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

Еще одна вещь, о которой следует помнить, заключается в том, что если вы хотите, чтобы общение было безопасным, вы должны обеспечить соблюдение https-запросов (вместо http), иначе клиентские секреты будут отправляться в виде простого текста. Это позволит злоумышленнику увидеть секрет и использовать его в своих собственных запросах.

+1

Проблема со статическими секретами когда-то одна из них сломана, вся ваша операция уязвима. Затем, чтобы обеспечить себя, вам придется заставить всех своих пользователей переключать ключи, как правило, путем переустановки приложения, что само по себе является болью. И HTTPS действительно нужен, но у определенных злоумышленников есть способ обойти это. –

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