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óboraz 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.
- Zawsze waliduj
redirect_uripo 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
statez 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
HSTSz 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 Allowedjeżeli metoda zapytania jest niepoprawna. - Waliduj
content-typepodczas zapytań i zezwalaj jedynie na wymagane typy danych (np.application/xml,application/json) oraz odpowiadaj406 Not Acceptablejeżeli nie pasują. - Waliduj
content-typeinformacji 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/orderszamiast/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-typepodczas zwracania danych. Jeżeli zwracaszapplication/jsonwtedy twójcontent-typetoapplication/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.
Feel free to contribute by forking this repository, making some changes, and submitting pull requests. For any questions drop us an email at team@shieldfy.io.