English | 繁中版 | 簡中版 | Português (Brasil) | Français | 한국어 | Nederlands | Indonesia | ไทย | Русский | Українська | Español | Italiano | 日本語 | Deutsch | 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
JWT payload
, mogą był łatwo dekodowane przy pomocy easily.
- 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.
- 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.
- 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 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.
- 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.
- Stwórz możliwość szybkiego wycofania udostępnionego wdrożenia.
- yosriady/api-development-tools - [ENG] Zbiór wartościowych narzędzi do tworzenia REST HTTP+JSON API.