Які найкращі методи захисту веб-API?


15

Мені потрібно створити API веб-сервісу для нашого мобільного додатка для взаємодії з нашим сервером і базою даних (в ASP.Net MVC 4, але це навряд чи актуально). У більшості дій Wile не потребують реєстрації користувачів у нашій службі, ми хотіли б обмежити доступ лише до користувачів нашого додатку.

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

Моя початкова ідея полягає в тому, щоб пристрій запитав у сервера маркер, який генерується випадковим чином і надсилається як є. Усі інші методи перевірять, чи містять заголовки запиту певний, який буде md5 хешу солоного маркера. Сервер знає маркер і сіль і вміє обчислити хеш і порівнює його з відправленим. Крім того, маркер як обмежений термін служби, і пристрій повинен отримувати ще один кожні години.

Це здається досить простим у здійсненні, і, мабуть, не на 100% доказів, це здається гарною ідеєю. Що ти думаєш?

Відповіді:


15

Як тільки ви випустите програму, вона може бути розроблена зворотним. Це означає, що ви нічого не можете зробити, щоб бути на 100% захищеним, якщо однаковий додаток (ті самі бінарні файли, ті ж налаштування) поширюється на всіх ваших користувачів.

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

Уявіть таку схему:

  1. Клієнт підключає та надсилає свій унікальний ідентифікатор (один ідентифікатор за користувачем).
  2. Сервер відповідає, надсилаючи виклик, зашифрований відкритим ключем. Цей відкритий ключ пов’язаний з унікальним ідентифікатором, надісланим раніше.
  3. Клієнт вирішує проблему, розшифровуючи дані за допомогою приватного ключа, і відсилає розшифровану таємницю просто на сервер.
  4. Сервер перевіряє, що поданий секрет відповідає первісно створеному.

Розробник, який зламає вашу програму та успішно отримає приватний ключ, зможе використовувати ваш API з його власного додатку, але він буде ідентифікатором як ваш для вашого сервера.

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

Хоча це допомагає, це не є 100% доказом. Що робити, якщо хакер знайде спосіб вилучити приватний ключ із вашого додатка, коли на його пристрої встановлено його власне додаток?


Бічна примітка, яка не відповідає на ваше запитання, але все ж може бути корисною: не думайте про API як інструмент для вашого основного продукту (мобільний додаток). Подумайте про це як про продукт першого класу , продукт, який може бути оплачений. Цю ж модель роками використовують Amazon та Google, її починає активно використовувати Microsoft з Azure тощо.

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

  • Скласти API таким чином, щоб його використовували лише ваші програми, дуже складно і дорого. Цей час і гроші можна використати на щось більш корисне.

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

  • Ви ніколи не уявляєте, як інші люди можуть використовувати ваші API. Це те, що сталося з Kinect. Спочатку Microsoft створила Kinect для ігор. Коли Microsoft відкрила API для громадськості, вони ніколи не уявляли, що через кілька років він буде використаний науковими програмами, сектором охорони здоров'я тощо. Це схоже на веб-API: чим більше розробників використовують, тим ширшими будуть ідеї.


Дуже цікава відповідь. Нам, мабуть, потрібно подумати, як ми можемо зробити API публічним. Також для довідки, цільовий ринок у Франції, де зворотна інженерія та демонтаж є незаконними, тому ми повинні занадто багато зайнятися цим.
Антуан

2
@Antoine: Revere інженерія була б незаконною в будь-якій країні, як тільки ліцензія забороняє це. Але той факт, що це незаконно, не означає, що ніхто не буде шанувати інженера з вашої програми.
Арсеній Муренко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.