interfețele de programare a aplicațiilor Web (API) oferă partea din spate pentru aplicațiile web și mobile moderne. Apelurile API Web reprezintă peste 80% din traficul web, iar infractorii cibernetici vizează din ce în ce mai mult API-urile, astfel încât asigurarea securității API-ului web este crucială. API-urile REST sunt cel mai frecvent tip de API web pentru serviciile web. Să vedem ce puteți face pentru a asigura securitatea API REST.
- ce este un REST API?
- două niveluri de securitate REST API
- asigurarea accesului securizat API
- securitatea conexiunii
- control acces API
- autorizare utilizator cu chei API
- restricții client API
- protejarea aplicațiilor care expun API-urile
- date sensibile în comunicarea API
- validarea tipului de conținut
- anteturi de securitate răspuns
- validarea intrărilor
- de ce este importantă securitatea API REST
- despre autor
ce este un REST API?
REST (prescurtare de la REpresentational State Transfer) este un stil de Arhitectură software pentru dezvoltarea web, utilizat de obicei cu comunicarea HTTP. API-urile RESTful (sau pur și simplu API-urile REST) sunt interfețe de programare a aplicațiilor care respectă principiile REST, permițând clienților web și serverelor să interacționeze cu o mare varietate de resurse web. API-urile REST utilizează verbe HTTP standard (metode) și coduri de stare pentru a oferi un anumit nivel de standardizare. Acestea sunt accesate prin URL-uri HTTP și sunt utilizate pe scară largă pentru serviciile web.
notă: API-urile REST sunt apatride ca protocolul HTTP în sine, ceea ce înseamnă că nu stochează nicio informație despre conexiunile sau sesiunile curente. Serviciile web RESTful oferă modalități de accesare și manipulare a resurselor, în timp ce gestionarea sesiunii ar trebui să fie gestionată de aplicație.
două niveluri de securitate REST API
înainte de a intra în detaliile tehnice, există un lucru important de reținut. Un API web expune o interfață la o aplicație web, deci trebuie să vă gândiți la securitate pe două niveluri: acces la API și apoi acces la aplicație.
la nivel API, aveți nevoie de autentificarea corectă, autorizarea, privilegiile de acces și așa mai departe, pentru a vă asigura că numai clienții autorizați pot utiliza interfața și pot executa numai operațiuni permise. La nivel de aplicație, trebuie să vă asigurați că punctele finale ale aplicației (adresele URL utilizate pentru a accesa interfața) nu sunt vulnerabile la atacurile care trec prin interfață sau o ocolesc.
să vedem cum puteți asigura securitatea API REST pe aceste două niveluri. Pentru o discuție detaliată a celor mai bune practici de securitate API, consultați OWASP rest Security Cheat Sheet.
asigurarea accesului securizat API
majoritatea API-urilor web sunt expuse la Internet, deci au nevoie de mecanisme de securitate adecvate pentru a preveni abuzul, pentru a proteja datele sensibile și pentru a se asigura că numai utilizatorii autentificați și autorizați le pot accesa.
securitatea conexiunii
securitatea începe cu conexiunea HTTP în sine. API-urile secure REST ar trebui să furnizeze numai puncte finale HTTPS pentru a se asigura că toate comunicările API sunt criptate folosind SSL/TLS. Acest lucru permite clienților să autentifice serviciul și protejează acreditările API și datele transmise.
control acces API
multe API-uri web sunt disponibile numai pentru utilizatorii autentificați, de exemplu, deoarece sunt privați sau necesită înregistrare sau plată. Deoarece API-urile REST sunt apatride, controlul accesului este gestionat de punctele finale locale. Cele mai frecvente metode de autentificare REST API sunt:
- autentificare de bază HTTP: acreditările sunt trimise direct în anteturile HTTP în codificarea Base64 fără criptare. Aceasta este cea mai simplă metodă de autentificare și cea mai ușor de implementat. De asemenea, este cel mai puțin sigur, deoarece datele confidențiale sunt transmise ca text simplu, deci ar trebui utilizate numai în combinație cu HTTPS.
- JSON Web Tokens (JWT): acreditările și alți parametri de acces sunt trimise ca structuri de date JSON. Aceste jetoane de acces pot fi semnate criptografic și sunt modalitatea preferată de a controla accesul la API-urile REST. Consultați foaia de înșelăciune OWASP JWT pentru o prezentare rapidă a jetoanelor web JSON și RFC 7519 pentru specificația completă.
- OAuth: mecanismele Standard OAuth 2.0 pot fi utilizate pentru autentificare și autorizare. OpenID Connect permite autentificarea securizată prin OAuth 2.0. De exemplu, API-urile Google utilizează OAuth 2.0 pentru autentificare și autorizare.
autorizare utilizator cu chei API
chei API oferă o modalitate de a controla accesul la serviciile publice REST. Operatorii de servicii web publice pot utiliza cheile API pentru a impune limitarea ratei pentru apelurile API și pentru a atenua atacurile de refuz de serviciu. Pentru serviciile monetizate, organizațiile pot utiliza cheile API pentru a oferi acces pe baza planului de acces achiziționat.
restricții client API
pentru a minimiza riscurile de securitate, operatorii de servicii REST ar trebui să restricționeze conectarea clienților la capacitățile minime necesare pentru serviciu. Aceasta începe cu restricționarea metodelor HTTP acceptate pentru a vă asigura că clienții configurați greșit sau rău intenționați nu pot efectua nicio acțiune dincolo de specificația API și de nivelul de acces permis. De exemplu, dacă API-ul permite doar obținerea cererilor, POST și alte tipuri de cereri ar trebui respinse cu codul de răspuns 405 metoda nu este permisă.
protejarea aplicațiilor care expun API-urile
odată ce clientul are acces legitim, trebuie să protejați aplicația web subiacentă de intrările malformate și rău intenționate. Apelurile și răspunsurile API REST pot include, de asemenea, date confidențiale care trebuie controlate.
date sensibile în comunicarea API
apelurile API includ adesea acreditări, chei API, jetoane de sesiune și alte informații sensibile. Dacă sunt incluse direct în URL-uri, aceste detalii ar putea fi stocate în jurnalele serverului web și scurgeri dacă jurnalele sunt accesate de infractorii cibernetici. Pentru a evita scurgerea de informații confidențiale, RESTful web services ar trebui să le trimită întotdeauna în anteturile de solicitare HTTP sau în organismul de solicitare (pentru solicitările POST și PUT).
validarea tipului de conținut
Continuând tema restricțiilor clientului API, serviciile REST ar trebui să definească cu precizie tipurile de conținut permise și să respingă cererile care nu au declarațiile corecte în anteturile HTTP. Aceasta înseamnă specificarea cu atenție a tipurilor permise atât în antetul Content-Type
, cât și în antetul Accept
, împreună cu setul de caractere (acolo unde este posibil). Dacă serviciul include JavaScript (sau alt cod de script), ar trebui să se asigure că tipul de conținut din antet este același ca în corpul solicitării, de exemplu application/javascript
. Acest lucru ajută la prevenirea atacurilor de injecție antet.
anteturi de securitate răspuns
antete de securitate HTTP suplimentare pot fi setate pentru a restricționa în continuare tipul și domeniul de aplicare al cererilor. Acestea includ X-Content-Type-Options: nosniff
pentru a preveni atacurile XSS bazate pe sniffing MIME și X-Frame-Options: deny
pentru a preveni încercările de clickjacking în browserele mai vechi.
dacă serviciul nu acceptă apeluri între domenii, ar trebui să dezactiveze CORS (partajarea resurselor de origine încrucișată) în anteturile sale de răspuns. Dacă se așteaptă astfel de apeluri, anteturile CORS ar trebui să specifice cu precizie originile permise.
validarea intrărilor
API-urile sunt proiectate pentru acces automat fără interacțiunea utilizatorului, deci este deosebit de important să se asigure că toate intrările sunt valide și așteptate. Orice solicitare care nu este conformă cu specificația API trebuie respinsă. Se aplică orientări tipice privind cele mai bune practici pentru validarea intrărilor:
- tratați toți parametrii, obiectele și alte date de intrare ca fiind de încredere.
- Utilizați funcționalitatea de validare încorporată acolo unde este disponibilă.
- verificați dimensiunea cererii și lungimea conținutului și tipul.
- utilizați tastarea puternică pentru parametrii API (dacă este acceptată).
- pentru a preveni injectarea SQL, evitați construirea interogărilor manual – utilizați interogări parametrizate în schimb.
- valorile parametrilor listei albe și intrările șir ori de câte ori este posibil.
- Înregistrați toate eșecurile de validare a intrărilor pentru a detecta încercările de umplere a acreditărilor.
de ce este importantă securitatea API REST
API-urile Web sunt coloana vertebrală a dezvoltării web și mobile moderne. Acestea permit aplicațiilor și serviciilor să comunice și să facă schimb de date între platformele hardware și software. În timp ce alte formate API sunt încă în uz (de exemplu SOAP), API-urile REST sunt acum tipul dominant, reprezentând peste 80% din toate API-urile web publice. Acestea oferă back-end pentru majoritatea aplicațiilor mobile și dispozitivelor IoT și permit integrarea ușoară între sisteme și aplicații.
deoarece folosesc aceleași tehnologii ca și aplicațiile web, API-urile REST pot fi vulnerabile la aceleași atacuri. În același timp, API-urile nu sunt proiectate pentru acces manual, deci pot fi dificil de testat, mai ales dacă unele puncte finale și caracteristici sunt nedocumentate. Testarea securității API necesită instrumente automate precise pentru a asigura o acoperire completă. Netsparker oferă suport complet pentru scanarea vulnerabilității API REST cu o varietate de metode de autentificare și rescriere automată a adreselor URL.
consultați documentația site-ului de testare API Netsparker REST pentru detalii tehnice complete și citiți articolul nostru complet despre scanarea API-urilor REST pentru vulnerabilități cu Netsparker.
despre autor
scriitor de conținut tehnic la Netsparker. Bazându-se pe experiența sa de jurnalist IT și traducător tehnic, face tot posibilul pentru a aduce securitatea web unui public mai larg pe blogul și site-ul Netsparker.