fbpx
goodfirms LOGO Created with Sketch.







    Jak zbudować bezpieczną bramkę API w Node.js?

    24
    styczeń
    2023
    Karol Dobrakowski
    7 minut czytania
    Udostępnij

    Backend (.NET) Developer poszukiwany!

    Zobacz ofertę pracy na Backend (.NET) Developera i aplikuj do naszej firmy już teraz! Pracuj gdzie chcesz i kiedy chcesz!

    Zobacz ofertę
     

    Większość ze znanych globalnie aplikacji webowych nie byłaby w stanie działać bez bramek API, ponieważ to właśnie one odpowiadają za komunikacje pomiędzy backendem a frontendem.  Podobnie jak w wielu innych przypadkach, aby móc sprawnie, szybko i wygodnie skonfigurować prostą bramkę API, wystarczy wykorzystać odpowiedni framework. W naszym poradniku wykorzystamy do tego Express.js, a następnie przejdziemy do kwestii zabezpieczeń. Na koniec postaramy się podpowiedzieć również, z jakich narzędzi warto skorzystać w trakcie konfigurowania własnej bramki API w Node.js.

    Jak szybko stworzyć prostą bramkę API w Node.js? – Krok 1 Pobieranie i instalowanie Node i npm

    W pierwszej kolejności trzeba naturalnie pobrać i zainstalować framework Node.js wraz z managerem pakietów npm. Można to zrobić zarówno za pośrednictwem standardowego instalatora, managera nvm (ang. Node Version Manager), jak i też polecenia npm install -g npm. Aby sprawdzić jakie wersje node i npm zostały zainstalowane, wystarczy wpisać w terminalu node -v albo npm -v. Obydwa te polecenia mogą posłużyć także jako metoda, dzięki której da się szybko i łatwo zweryfikować czy npm albo node są już zainstalowane. W niektórych dystrybucjach Linuxa tak właśnie może być, ale na systemach z Windowsem i macOS z reguły trzeba je ręcznie pobierać.

    Własna bramka API w Node.js – Krok 2 Tworzenie plików i generowanie zależności z Express.js

    Przy pomocy poleceń takich jak npm init -y oraz npm install express –save wpierw tworzymy nowy projekt w Node.js, a następnie pobieramy wspomniany już we wstępie framework Express.js. Dzięki temu automatycznie wygeneruje nam się plik z zależnościami o nazwie package.json. W tym samym katalogu powinny się docelowo znajdować także pliki takie jak index.js i config.js.

    Uwierzytelnianie bramek API w Node.js – Krok 3 Implementowanie zabezpieczeń z Express.js

    Jedną z wielu zalet Express.js jest to, iż za pośrednictwem polecenia npm install express-session dotenv –save można stosunkowo łatwo zaimplementować uwierzytelnianie oparte na ciasteczkach. Aby dodatkowo podnieść poziom zabezpieczeń, wykorzystaliśmy tu również pakiet dotenv. W ten właśnie sposób będziemy wczytywać wrażliwe dane (np. klucze API, hasła, loginy itp.) ze zmiennych środowiskowych z plików *.env. Dzięki modułom middleware (np. cookie-session  albo express-session) można zabezpieczyć się przed tymi atakami, które wykorzystują wrażliwości oparte na domyślnym nazewnictwie sesji.

    Konfigurowanie limitów – Krok 4 Zabezpieczanie bramki API przed atakami typu DoS/DDoS

    Aby pobrać i zainstalować pakiet express-rate-limit wystarczy wpisać polecenie npm install express-rate-limit –save. Następnie w pliku index.js należy:

    1. Zadeklarować wpierw wymaganą stałą np.:

    const rateLimit = require("express-rate-limit");

    1. Zdefiniować limit żądań wraz z interwałem czasu. Dla przykładu poniższe ograniczenie pozwoli wysyłać maksymalnie 25  zapytań na 5 minut

    rateLimit({

        windowMs: 5 * 60 * 1000, // 5-minutowy interwał

        max: 25, // maksymalnie 25 żądań

      })

    );

    Zabezpieczenie tego typu świetnie się sprawdzi w przypadku bardzo często spotykanych ataków typu DoS (ang. Denial of Service) i DDoS (Distributed DoS). Jeśli liczba wysyłanych za pośrednictwem bramki API zapytań nie zostanie w ten sposobów ograniczona i zabezpieczona, to trzeba się liczyć z tym, iż pojedynczy użytkownik może być w stanie samodzielnie przeciążyć cały serwer.

    Jak zabezpieczyć bramkę API w Node.js? - Krok 5 Rejestrowanie logów i zbieranie danych z Winston

    Winston to jeden z wielu pakietów middleware, które zdecydowanie opłaca się wdrożyć do struktury bramki API, jeśli tylko zachodzi potrzeba gromadzenia logów. Dzięki zbieranym w ten sposób danym można znacznie dokładniej identyfikować potencjalne błędy i incydenty. Pakiet ten da się wygodnie pobrać I zainstalować przy pomocy polecenia npm install winston express-winston response-time –save.

    Po co dodawać CORS i Helmet do bramki API? - Krok 6 Udostępnianie zasobów między źródłami

    Dzięki poleceniu npm install cors helmet --save pobieramy i instalujemy dodatkową warstwę zabezpieczeń. Obydwa te pakiety poprawiają bezpieczeństwo nagłówków HTTP oraz wymuszają bezpieczne połączenie z serwerem (np. za pośrednictwem HTTPS, SSL albo TLS). Warto wdrożyć je choćby ze względu na to, iż zabezpieczają one bramkę API przed często spotykanymi atakami typu MITM (ang. Man In The Middle) oraz XSS (ang. Cross-Site Scripting).

    Dodatkowe zabezpieczenia bramek API – Krok 7 Wyłączamy X-Powered-By

    Celem podniesienia poziomu bezpieczeństwa zdecydowanie warto wyłączyć X-Powered-By. Pomimo że udostępniane z każdym zapytaniem za pośrednictwem X-Powered-By dane mogą wydawać się nieszkodliwe, to w praktyce niestety są one w stanie posłużyć do identyfikacji potencjalnych wrażliwości stacku technologicznego bramki API.

    Podsumowanie – Krok 8 Szyfrowanie i tokeny CSRF

    Wszystkie przesyłane za pośrednictwem bramek API dane powinny być dodatkowo zabezpieczone poprzez szyfrowanie za pośrednictwem TLS albo SSL. W przeciwnym razie, jeśli zapytania lub odpowiedzi zostaną przechwycone, to będzie je można natychmiast odczytać. Przy podnoszeniu poziomu bezpieczeństwa bramki warto zainstalować także pakiet csurf, gdyż pozwoli on wdrożyć tokeny CSRF.

    Jak możemy Ci pomóc?
    Porozmawiaj z nami!







      Wiktor Sobczyk
      Co-Founder, Key Account Manager
      Kliknij, aby podejrzeć