Як захистити веб-сервіси RESTful?


88

Я повинен впровадити безпечні веб-служби RESTful . Я вже проводив деякі дослідження за допомогою Google, але застряг.

Варіанти:

TLS (HTTPS) +

Чи можна розглянути більше можливих варіантів? Якщо OAuth, то яку версію? Це взагалі має значення? З того, що я до цього часу читав, OAuth 2.0 із маркерами-носіями (тобто без підписів) видається небезпечним .

Я знайшов ще одну дуже цікаву статтю про автентифікацію на основі REST .

Захистіть свій REST API ... Правильний шлях

Відповіді:


59

Існує ще один, дуже безпечний метод. Це сертифікати клієнта. Знаєте, як сервери представляють сертифікат SSL, коли ви зв’язуєтесь з ними на https? Ну сервери можуть запитувати сертифікат у клієнта, щоб вони знали, що клієнт є тим, ким вони кажуть. Клієнти генерують сертифікати та передають їх вам по захищеному каналу (як, наприклад, прихід у ваш офіс із USB-ключем - бажано не троянським USB-ключем).

Ви завантажуєте відкритий ключ сертифікатів клієнта сертифіката (і сертифікати їх підписувача, якщо це необхідно) на ваш веб-сервер, і веб-сервер не прийматиме підключення ні від кого, крім людей, які мають відповідні приватні ключі для сертифікатів воно знає про. Він працює на рівні HTTPS, тому ви навіть можете повністю пропустити автентифікацію на рівні програми, наприклад OAuth (залежно від ваших вимог). Ви можете абстрагувати шар і створити місцевий Центр сертифікації та підписати Запити сертифікатів від клієнтів, дозволяючи пропустити кроки "змусити їх зайти в офіс" та "завантажити сертифікати на сервер".

Біль у шиї? Абсолютно. Хороший для всього? Ні. Дуже безпечно? Так.

Однак він покладається на клієнтів, які зберігають свої сертифікати в безпеці (вони не можуть розміщувати свої приватні ключі в Інтернеті), і зазвичай він використовується, коли ви продаєте послугу клієнтам, а не дозволяєте будь-кому реєструватися та підключатися.

У будь-якому випадку, це може бути не рішення, яке ви шукаєте (це, мабуть, не чесно), але це інший варіант.


Добре, зараз мене бентежить, який з них краще, такий підхід чи інша відповідь . Не могли б ви детальніше сказати? : D
fikr4n

Ваша відповідь буде ідеальною для майстрів, але заплутаною для початківців. Чи можете ви надати детальну інформацію чи посилання для читання?
Раджан Равал,

Якщо сертифікати самопідписуються, це все ще "дуже безпечно"?
Джойс,

@Joyce Я б подумав ні. Оскільки вам не довіряють (не ображайте), сертифікатам, які ви підписуєте (власним сертифікатом), не можна довіряти. Я вважаю, що самопідписані сертифікати є більш корисними для тестування.
mbmast

З огляду на те, що кінцевий користувач (замовник) має сертифікат клієнта, відкритий ключ якого надається серверу, чи не розвалюється вся «дуже безпечна» річ, якщо машина клієнта зламана, а сертифікат клієнта викрадений?
mbmast

18

HTTP Basic + HTTPS - один із поширених методів.


3
Я не думаю, що дайджест http дає вам щось більше від http basic, якщо вони обидва над https.
pc1oad1etter

3
Ви можете серйозно додати корисну інформацію про переваги дайджесту HTTP без тону.
pc1oad1etter

9

Якщо вибираєте між версіями OAuth, використовуйте OAuth 2.0.

Токени носія OAuth слід використовувати лише із захищеним транспортом.

Маркери носія OAuth настільки ж безпечні або небезпечні, як і транспорт, що шифрує розмову. HTTPS піклується про захист від атак повторного відтворення, тому не обов'язково, щоб маркер пред'явника також захищався від повторного відтворення.

Хоча це правда, що якщо хтось перехоплює ваш токена-носія, він може видавати вас за виклик API, існує безліч способів зменшити цей ризик. Якщо ви даєте своїм токенам тривалий термін дії і очікуєте, що ваші клієнти зберігатимуть їх локально, у вас є більший ризик перехоплення і використання зловмисників, ніж якщо ви даєте своїм токенам короткий термін дії, вимагаєте від клієнтів придбання нових токенів для кожного сеансу, і радити клієнтам не зберігати жетони.

Якщо вам потрібно захистити корисні навантаження, які проходять через декількох учасників, тоді вам потрібно щось більше, ніж HTTPS / SSL, оскільки HTTPS / SSL шифрує лише одне посилання графіка. Це не вина OAuth.

Клієнти легко отримують токени на пред'явника, прості для використання клієнтами для дзвінків API і широко використовуються (разом із HTTPS) для захисту загальнодоступних API від Google, Facebook та багатьох інших служб.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.