19 API най-добри практики за сигурност, които да внедрите и да останете в безопасност

Сигурността на API е един от най-важните аспекти, за които трябва да се погрижите в почти всяко приложение.

В наши дни API са най-добрият начин да интегрирате вашето приложение с други приложения. Те осигуряват шлюз към вашето приложение и по този начин приложните програмни интерфейси (API) трябва да бъдат достатъчно сигурни, така че да нямате нежелани посетители.

Нека да разгледаме някои уязвимости на API, които могат да бъдат заплаха за вашето приложение.

Често срещани уязвимости на API

#1. Скриптове между сайтове (XSS)

XSS атаките са често срещани в уеб приложенията, но могат да възникнат и чрез API, ако входящите потребителски данни не са правилно дезинфекцирани. Нападателите могат да стартират злонамерени скриптове на сървъра и да получат достъп до чувствителни данни.

#2. Нарушение на ограничаване на скоростта

Нарушаването на функцията за ограничаване на скоростта на API може да даде възможност на атакуващите да бомбардират вашия сървър с огромен брой заявки. В крайна сметка сървърът може да се срине и вашата клиентска база може да има трудности да се свърже с вас.

#3. Неправилно удостоверяване

Ако API не е правилно конфигуриран чрез надежден метод за удостоверяване, всяка трета страна може да получи достъп до вашата система чрез API. Упълномощаването също е важно, защото определя кой има достъп до кой API ресурс до определен период от време.

#4. Несигурно предаване на данни

Данните, които се изпращат до потребителите на вашия API, трябва да бъдат криптирани по пътя. Ако не е, тогава има вероятност данните да бъдат изтекли от нападатели, използващи атака „човек по средата“. Ето защо винаги се препоръчва използването на защитен протокол като HTTPS за предаване на данни.

#5. Отхвърлени/остарели зависимости

API имат много външни зависимости, които се използват за изпълнение на сложни задачи и за разтоварване на някои сложни логики. Ако тези зависимости имат уязвимост, тогава индиректно вашият API също става уязвим. Винаги се уверявайте, че актуализирате версиите на зависимостите.

След като вече знаете уязвимостите на API, нека да разгледаме някои най-добри практики за защита на вашия API.

Прочетете също: Най-добрите алтернативи на пощальон за тестване на API за разработчици

Сигурност на API – най-добри практики

API версии

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

  Заключете среща, за да не допускате нежелани потребители

Поддържането на вашия API актуален е най-малкото, което можете да направите, за да предотвратите използването му от нападатели.

Удостоверяване

Има куп начини, по които можете да удостоверите потребител на API. Най-простият начин е да използвате подхода потребителско име/парола, но това е твърде основно и зависи само от това колко силна е паролата.

Друг начин е да използвате API ключове за достъп до API. Можете да предоставите на всеки потребител на API уникален ключ, който той може да използва.

JWT удостоверяването е техника, при която потребителските идентификационни данни се преобразуват в цифрово подписан токен и след това се изпращат на потребителя. След това потребителят изпраща същия токен обратно при всяка заявка към сървъра, за да може сървърът да потвърди. JWT също имат време на изтичане.

Най-ефективното решение е OAuth. Той позволява достъп на трети страни до API с вече съществуващи идентификационни данни за вход. Например, ако вече сте влезли в Google, дадено приложение може да използва тези идентификационни данни, за да влезе в акаунта ви, без да е необходима парола. Вашият акаунт в Google става парола.

Упълномощаване

Упълномощаването е нещо различно от удостоверяването. Докато упълномощавате потребител, той вече е удостоверен да използва вашия API и е само това до кой API ресурс ще има достъп.

Например университетски професор може да има достъп до всички студенти в група, но един студент може да има достъп само до техните данни. В този случай студентът и професорът са удостоверени в една и съща система, но са упълномощени да извършват само определени действия.

Гарантирането, че API оторизацията работи добре, може да предотврати неоторизиран достъп до ресурс.

Редакция на данни

Редактирането на данни е процес на селективно разкриване на информация на потребителите и защита на чувствителна информация. Правилното оторизиране може да доведе до по-добро редактиране на данни. Регламентите за поверителност на данните, като GDPR, също се основават на редактиране на данни. Всяка нежелана трета страна не трябва да може да надникне в лични или чувствителни данни.

Можете да приложите реакция на данни чрез внедряване на междинен софтуер или мениджър на шлюз.

Шифроване

Това се превърна в най-важната проверка за сигурност в днешния свят. Шифроването е задължително, ако работите с някакъв вид чувствителна информация. Най-малкото криптиране, което можете да направите, е чрез използване на HTTPS протокол, който използва TLS (Transport Layer Security) ръкостискане и SSL (Secure Socket Layer).

Шифроването от край до край е друг начин за здраво осигуряване на данните при пренос. Данните, които се съхраняват в базата данни, също трябва да бъдат криптирани в случай, че нападател може да успее да проникне в базата данни и да получи достъп до данните.

Обработка на грешки

Информацията за инфраструктурата на приложението може да бъде изтекла към нападателите чрез подробни съобщения за грешка. За да избегнете това, дръжте съобщенията за грешка общи и внедрете персонализирана обработка на грешки. Уверете се, че в подробностите за грешката не е регистрирана чувствителна системна информация.

  Коригирайте наслагването на произхода, което не работи в Titanfall 2

Валидиране на входа и саниране на данни

Валидирането на входа е изключително важно, когато работите с API, защото не знаете входа, докато потребителят не го изпрати.

Санирането е процес на премахване на всеки нежелан изпълним код от полезния товар. Нападателят може да въведе скрипт на Javascript и ако не го дезинфекцирате, преди да го предадете на вашия HTML, той ще се изпълни като скрипт и ще извлече данни.

Неправилната дезинфекция може да доведе до Cross-site scripting (XSS) атаки.

Системи за откриване на проникване

Известни също като IDS, системите за откриване на проникване помагат при наблюдението и откриването на мрежов трафик, идващ към API. Ако открие необичайно поведение в трафика, може да регистрира и да предупреди съответните органи.

Обикновено има два типа системи: базирани на мрежа и базирани на хост. В мрежово базираните системи системата е разпределена между различни контролни точки, за да наблюдава трафика в множество точки. В система, базирана на хост, той се разполага на един хост.

Такива системи са чудесен начин да определите кой се опитва да получи достъп до вашата мрежа, преди да попречи на вашите данни.

IP бели списъци

IP белият списък е начин да разрешите само на избрани IP адреси достъп до вашия API и вашата мрежа. Тази техника може да не работи, ако имате публичен API, защото е твърде сложно да се изброява всеки IP.

Полезно е, ако знаете, че само някои от приложенията на системите ще имат достъп до вашия API.

JSON уеб токени

JWT обикновено се използват за удостоверяване на потребител чрез изпращане на потребителя на цифрово подписан токен, създаден от техните идентификационни данни. Работи, защото скрива действителните идентификационни данни на потребителя и също така не е необходимо да съхранявате идентификационните данни в базата данни или от страна на потребителя.

JWT може да бъде разделен на три секции: заглавка, полезен товар и подпис. Разделът за полезен товар съдържа потребителските идентификационни данни, а заглавката може да съдържа информация като използвания алгоритъм. Разделът за подпис се подписва цифрово от сървъра и клиента при всяка следваща заявка.

JWT обикновено имат дата на изтичане, след която нов токен се генерира от сървъра и след това се изпраща на потребителя.

Регистриране и наблюдение

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

Ограничаване на скоростта

Ако даден API не прилага ограничаване на скоростта, той е уязвим за DDoS атаки поради неочакван приток на мрежов трафик. Нападателите могат да наводнят системата с огромен брой заявки за кратък период от време, като в крайна сметка сървърът се срине.

  Как да скриете изскачащи прозорци за чат на уебсайтове

Приложните програмни интерфейси (API) за регулиране и ограничаване на скоростта избягват атаките за отказ на услуга, като ограничават потока на трафика на API.

Сигурни зависимости

Уязвимостите не се появяват само от вашия API код, те могат също да бъдат част от всякакви зависимости на трети страни, които може да използвате във вашия API. Ето защо е важно редовно да наблюдавате и сканирате вашите зависимости и да откривате всички уязвимости, които може да присъстват в тях.

Можете да приложите планирано задание за редовно сканиране и актуализиране на зависимости, ако те могат да бъдат актуализирани с версия на корекция, коригираща уязвимостта. Освен това изберете зависимости, които са по-сигурни и предоставят чести актуализации на защитата.

Заглавките за сигурност трябва да бъдат върнати с отговора на API, за да инструктират браузъра относно сигурността на API и как трябва да действа. Важни заглавки, които можете да изпратите, за да подобрите сигурността, са:

  • Cache-Control: Задайте го на no-store, за да избегнете съхраняването на чувствителна информация в браузъра.
  • Content-Security-Policy: Задаването му на frame-ancestors „няма“ избягва рамкирането на API отговори във iframe.
  • Content-Type: Тази заглавка е важна, тъй като без нея браузърът се опитва да отгатне типа на отговора на API и това може да доведе до атаки чрез снифтинг. За JSON отговор можете да го зададете на application/json.
  • X-Content-Type-Options: Задайте го на nosniff, за да инструктирате браузъра да не отгатва MIME типа на отговора и да го търси само в заглавката Content-Type.

Стандарти и рамки за сигурност

Проектирайте вашия API с помощта на предварително дефинирани стандарти и рамки за сигурност, за да сте сигурни, че вашият API е актуален с най-новите съображения за сигурност.

Изтичане на токена

Ако използвате токени на носител, времето за изтичане на токена трябва да е краткотрайно, защото изисква повторно удостоверяване на потребителя, което е добре. В JWT обикновено има два токена: токени за достъп и опресняване. Токените за опресняване са дълготрайни, докато токените за достъп са краткотрайни. Във всеки случай вашите токени трябва да имат срок на валидност.

Защитна стена за уеб приложения

WAF, известен още като защитна стена на уеб приложения, е шлюз, който наблюдава, филтрира и блокира всеки злонамерен мрежов трафик. Често това е най-добрият начин за предотвратяване на злонамерени атаки чрез HTTP протокол.

Използване на API Gateways

Ако искате лесно да настроите сигурността на API и да управлявате API маршрутите и техния достъп, можете да изберете API шлюзове. Те също така предоставят инструменти за наблюдение, регистриране и анализ, които можете да използвате, за да наблюдавате своя API.

Нулево доверие

Идеята зад стратегията за нулево доверие е да не се доверявате на централизиран източник. Сигурността трябва да бъде многослойна и да се прилага на множество контролно-пропускателни точки.

По принцип не може да се вярва на никого, дори на разработчиците, работещи върху API. Всеки шлюз трябва да бъде наблюдаван и анализиран, за да се предотвратят пробиви в сигурността.

Автоматизацията е полезна в такива случаи. Можете да използвате автоматизирани инструменти за редовно наблюдение и блокиране на необичайна или подозрителна дейност.

Заключителни думи

Можете да направите толкова много, за да запазите вашите API защитени. Винаги има вратички в софтуера, които могат да бъдат използвани. Такива вратички водят до уязвимости от нулевия ден. Така че, за да защитите своите API, най-малкото, което можете да направите, е да ги актуализирате с най-новите стандарти за сигурност.

Разгледайте най-добрите динамични инструменти за тестване на сигурността на приложенията.