Как защитить веб-службу REST в Java EE 6 - программирование
Подтвердить что ты не робот

Как защитить веб-службу REST в Java EE 6

Я создал веб-приложение с использованием Java EE 6 (с использованием эталонных реализаций), и я хочу показать его как веб-службу REST.

Фон состоит в том, что я хочу получать данные из веб-приложения в приложение iOS, которое я сделал. Вопрос в том, как я могу защитить приложение? Я хочу, чтобы мое приложение использовало веб-службу. Это возможно и как я могу это сделать? Мне нужно только знать, что я должен искать и читать, а не код.

4b9b3361

Ответ 1

К сожалению, ваш веб-сервис никогда не будет полностью безопасным, но здесь вы найдете несколько основных вещей, которые вы можете сделать:

  • Использовать SSL
  • Оберните все ваши (входящие) исходящие сообщения в запросы POST. Это предотвратит случайное отслеживание, чтобы узнать, как работает ваш веб-сервис (для того, чтобы перепроектировать протокол).
  • Как-то проверять пользователей приложений. В идеале это будет включать OAUTH, например, с помощью учетных данных Google, но вы получите эту идею.

Теперь я хочу указать, почему это не будет полностью безопасно:

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

Что вы можете сделать?

  • Проверяйте учетные записи на своем сервере и контролируйте их для аномального использования.

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

Изменить: Кроме того, если это еще не очевидно, используйте запросы POST (или GET) для всех запросов приложений (на ваш сервер). Это, в сочетании с SSL, должно помешать вашим случайным snoopers.

Edit2: Кажется, что я ошибаюсь re: POST более безопасен, чем GET. Этот ответ был весьма полезен, указывая на это. Поэтому я предполагаю, что вы можете использовать GET или POST здесь взаимозаменяемо.

Ответ 2

Зависит от того, насколько безопасно это сделать.

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

Ответ 3

мои предложения:

  • используйте https вместо http. есть бесплатный сертификат ssl, получить один и установить.
  • используйте сложный путь, например 4324234AA_fdfsaf/в качестве конечной точки корня.

из-за характера протокола http, часть пути зашифрована в запросе https. поэтому он очень безопасен. есть способы расшифровать запрос с помощью атаки "человек-в-середине", но для этого требуется полный контроль над клиентским устройством, включая установку sile-сертификата ilegal. но я потратил больше времени на свое приложение, чтобы сделать его успешным.

Ответ 4

Создайте правило на компьютере, на котором размещена ваша веб-служба, чтобы разрешить вашему приложению доступ к нему через какой-либо порт. В Amazon EC2 это делается с созданием правила в группе безопасности экземпляра.

Ответ 5

Мы использовали RestEasy в качестве части для обеспечения безопасности наших веб-сервисов RESTful. Там должно быть много примеров, но вот тот, который может помочь вам начать.

http://howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic-authentication-and-authorization-tutorial/

Вы также можете использовать OAUTH:

http://oltu.apache.org/index.html