Как защитить веб-сервис REST в Java EE 6 - PullRequest
16 голосов
/ 21 января 2012

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

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

Ответы [ 5 ]

8 голосов
/ 21 января 2012

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

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

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

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

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

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

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

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

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

4 голосов
/ 21 января 2012

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

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

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

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

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

0 голосов
/ 15 августа 2013

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

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

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

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

0 голосов
/ 21 января 2012

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

...