English | 繁中版 | 简中版 | العربية | Azərbaycan | বাংলা | Català | Čeština | Deutsch | Ελληνικά | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt
Lista kontrolna najważniejszych metod zabezpieczenia podczas projektowania, testowania oraz wypuszczania własnego API.
- Nie używaj
Basic Auth
. Użyj standardów uwierzytelniania (np. JWT, OAuth). - Nie wynajduj koła na nowo podczas
Uwierzytelniania
,generowanie tokenów
,przechowywania haseł
. Użyj sprawdzonych standardów. - Dodaj
Maksymalną ilość prób
oraz inne opcje ograniczające podczas Logowania. - Szyfruj wszystkie wrażliwe (ważne) dane.
- Użyj losowego, skomplikowanego klucza (
JWT Secret
) aby uczynić token bezpieczniejszym przeciw atakom typubrute force
. - Algorytmy trzymaj w backendzie, nie upubliczniaj algorytmów.
- Ustaw wygaszanie tokenów (
TTL
,RTTL
) najkrótsze jak to możliwe. - Nie przechowuj wrażliwych danych w payloadzie
JWT
, mogą być one łatwo zdekodowane. - Unikaj przechowywania zbyt dużej ilości danych. JWT jest zwykle udostępniany w nagłówkach i ma limit rozmiaru.
- Ustaw limit zapytań (Throttling) aby uniknąć ataku DDoS / brute-force.
- Użyj HTTPS aby uniknąć MITM (Man In The Middle Attack) - Ataku polegającego na pośrednictwie w wymianie informacji pomiędzy dwoma punktami np. klientem i serwerem.
- Użyj nagłówka
HSTS
z SSL aby uniknąć SSL Strip attack. - Wyłącz wykazy katalogów.
- W przypadku prywatnych API, zezwalaj na dostęp tylko z adresów IP/hostów umieszczonych na białej liście.
- Zawsze waliduj
redirect_uri
po stronie serwera aby zezwolić tylko URL-om z dozwolonej listy (whitelist
). - Zawsze próbuj wymienić kodem nie tokenami (nie zezwalaj na
response_type=token
). - Użyj parametru
state
z losowym hashem aby zabezpieczyć proces OAuth przed atakiem CSRF. - Zdefiniuj oraz waliduj zakres parametrów dla każdej aplikacji.
- Użyj odpowiedniej metody protokołu HTTP dla danej operacji:
GET (odczyt)
,POST (tworzenie)
,PUT/PATCH (zmiana)
, andDELETE (usuwanie)
, i odpowiadaj405 Method Not Allowed
jeżeli metoda zapytania jest niepoprawna. - Waliduj
content-type
podczas zapytań i zezwalaj jedynie na wymagane typy danych (np.application/xml
,application/json
) oraz odpowiadaj406 Not Acceptable
jeżeli nie pasują. - Waliduj
content-type
informacji przekazywanych metodą POST (np.application/x-www-form-urlencoded
,multipart/form-data
,application/json
). - Waliduj informacje wprowadzane przez użytkownika, aby uniknąć zagrożeń (np..
XSS
,SQL-Injection
,Zdalne Wykonanie Skryptu
). - Nie używaj żadnych wrażliwych danych w URL, zamiast tego użyj standardowego nagłówka Autoryzującego.
- Użyj tylko szyfrowania po stronie serwera.
- Użyj usługi API Gateway aby włączyć caching oraz np.
Quota
,Spike Arrest
,Concurrent Rate Limit
.
- Sprawdź czy wszystkie endpointy są zabezpieczone uwierzytelnianiem aby uniknąć niautoryzowanego dostępu.
- Unikaj ukazywania ID użytkownika. Użyj np.
/me/orders
zamiast/users/654321/orders/
. - Nie używaj auto inkrementacji w polu ID. Zamiast tego użyj
UUID
. - Jeżeli parsujesz pliki XML, upewnij się, że jesteś odporny na
XXE
(XML external entity attack) orazBillion Laughs/XML bomb
. - Użyj CDN do przechowywania wysyłanych plików.
- Jeżeli pracujesz z dużą ilością danych, użyj procesów Workers oraz kolejkowania Queues aby przetworzyć jak najwięcej w tle i zwrócić informacje szybko aby uniknąć blokowania HTTP.
- Nie zapomnij o wyłączeniu trybu debugowania.
- Użyj niewykonywalnych stacks jeśli są dostępne.
- Wyślij nagłówek
X-Content-Type-Options: nosniff
. - Wyślij nagłówek
X-Frame-Options: deny
. - Wyślij nagłówek
Content-Security-Policy: default-src 'none'
. - Usuń nagłówki cyfrowego odcisku palca (digital fingerprint) -
X-Powered-By
,Server
,X-AspNet-Version
. - Wymuś
content-type
podczas zwracania danych. Jeżeli zwracaszapplication/json
wtedy twójcontent-type
toapplication/json
. - Nie zwracaj ważnych informacji jak
dane uwierzytelniające
,hasła
,tokeny bezpieczeństwa
. - Zwróc odpowiedni status w zależności od operacji. (np.
200 OK
,400 Bad Request
,401 Unauthorized
,405 Method Not Allowed
).
- Przetestuj wszystkie rozwiązania stosując testy jednostkowe.
- Oddaj kod do przejrzenia innym, poddaj go
code review
. - Upewnij się, że wszystkie komponenty twojej usługi są skanowane przez oprogramowanie antywirusowe przed wejściem na produkcje. Uwzględnij także zewnętrzne biblioteki.
- Ciągle uruchamiaj testy bezpieczeństwa (analiza statyczna/dynamiczna) w swoim kodzie.
- Sprawdź swoje zależności (zarówno oprogramowanie i system operacyjny) pod kątem znanych luk w zabezpieczeniach.
- Stwórz możliwość szybkiego wycofania udostępnionego wdrożenia.
- Użyj ze scentralizowanych logowań dla wszystkich usług i komponentów.
- Użyj agentów do monitorowania całego ruchu, błędów, żądań i odpowiedzi.
- Użyj alertów dla SMS, Slack, Email, Telegram, Kibana, Cloudwatch, itp.
- Upewnij się, że nie rejestrujesz żadnych poufnych danych, takich jak karty kredytowe, hasła, kody PIN, itp.
- Użyj systemu IDS i/lub IPS do monitorowania żądań i instancji API.
- yosriady/api-development-tools - [ENG] Zbiór wartościowych narzędzi do tworzenia REST HTTP+JSON API.
Możesz wnieść swój wkład, tworząc fork tego repozytorium, wprowadzając pewne zmiany i przesyłając pull request. W przypadku jakichkolwiek pytań napisz do nas email na adres [email protected]
.