Cross-site scripting (XSS) to rodzaj luki w zabezpieczeniach, który umożliwia atakującym wstrzykiwanie złośliwych skryptów do witryn internetowych przy użyciu kodu klienta. Stanowi poważne zagrożenie, ponieważ osoby atakujące mogą wykorzystać go do podszywania się pod użytkownika, uzyskania dostępu do wrażliwych danych, a nawet zmiany zawartości strony internetowej.
Jest tak niebezpieczny, że w 2021 r. znalazł się na drugim miejscu na liście wyliczania wspólnych słabości wśród 25 najniebezpieczniejszych słabości. Oznacza to, że jeśli tworzysz strony internetowe, musisz wiedzieć o skryptach między witrynami i o tym, jak temu zapobiec.
Jak działa Cross-Site Scripting?
Zanim zrozumiesz, jak działa cross-site scripting, ważne jest, aby wiedzieć, co oznacza polityka tego samego pochodzenia (SOP). SOP to polityka mechanizmu bezpieczeństwa, która ogranicza witrynę internetową (jedno pochodzenie) przed odczytywaniem lub zapisywaniem na innej stronie (inne pochodzenie). Uniemożliwia złośliwym witrynom wysyłanie złośliwego kodu do zaufanych witryn.
Ataki typu cross-site scripting próbują ominąć tę zasadę, wykorzystując niezdolność przeglądarki do rozróżnienia między prawidłowym kodem HTML a złośliwym kodem. Na przykład atakujący może wstrzyknąć kod JavaScript do docelowej witryny internetowej. Załóżmy, że przeglądarka wykonuje kod, a atakujący uzyskuje dostęp do tokenów sesji, plików cookie i innych poufnych danych.
Istnieją trzy rodzaje cross-site scripting, którego hakerzy używają do łamania stron internetowych: odzwierciedlone, zapisane i DOM XSS.
Jak zapobiegać skryptom między witrynami w węźle
Poniżej przedstawiono kilka kroków, które możesz podjąć, aby zapobiec wykonywaniu skryptów między witrynami w węźle.
Odkaż wejście
Atakujący muszą być w stanie wysłać dane do Twojej aplikacji internetowej i wyświetlić je użytkownikowi, aby przeprowadzić atak XSS. Dlatego pierwszym środkiem zapobiegawczym, który musisz podjąć, jest czyszczenie wszystkich danych wejściowych, które Twoja aplikacja otrzymuje od użytkowników. Jest to kluczowe, ponieważ wykrywa fałszywe dane, zanim serwer je wykona. Możesz to zrobić ręcznie lub użyć narzędzia takiego jak walidator co przyspiesza proces.
Na przykład możesz użyć walidator do ucieczki tagów HTML w danych wejściowych użytkownika, jak poniżej.
import walidator z „walidator”;
let userInput = `Jane <skrypt onload="alarm('Hack XSS');"></script>`;
wynajmować sanitizedInput = validator.escape (userInput);
Gdybyś miał uruchomić powyższy kod, oczyszczone dane wyjściowe byłyby takie.
Jane < skrypt onload=&cytat; alarm('XSS hack');&cytat;></ scenariusz>
Ogranicz wprowadzanie przez użytkownika
Ogranicz typ danych wejściowych, które użytkownik może przesłać w formularzu poprzez weryfikację. Na przykład, jeśli masz pole wejściowe dla wiadomości e-mail, zezwalaj tylko na wprowadzanie danych w formacie wiadomości e-mail. W ten sposób minimalizujesz szanse, że atakujący poda złe dane. Możesz również użyć do tego pakietu walidatora.
Implementuj politykę dotyczącą plików cookie tylko HTTP
Pliki cookie przechowują dane w lokalnej pamięci podręcznej i odeślij go z powrotem na serwer przez HTTP. Jednak osoby atakujące mogą również używać JavaScript, aby uzyskać do nich dostęp za pośrednictwem przeglądarki, więc są łatwym celem.
Plik cookie tylko HTTP to zasada, która uniemożliwia skryptom po stronie klienta dostęp do danych plików cookie. Oznacza to, że nawet jeśli Twoja aplikacja zawiera lukę, a atakujący ją wykorzysta, nie będzie mógł uzyskać dostępu do pliku cookie.
Oto przykład, jak można zaimplementować politykę plików cookie tylko dla HTTP w Node.js za pomocą Express:
aplikacja.posługiwać się(wyrazić.sesja({
sekret: "sekret",
ciastko: {
httpTylko: PRAWDA,
bezpieczne: PRAWDA
}
}))
Jeśli atakujący próbował uzyskać dostęp do pliku cookie za pomocą httpTylko tag ustawiony na true, jak pokazano powyżej, otrzymaliby pusty ciąg.
Cross-Site Scripting to łatwy cel dla hakerów
Chociaż zapewnienie bezpieczeństwa Twojej aplikacji jest kluczowe, wdrożenie jej może być skomplikowane. W tym poście dowiedziałeś się o atakach cross-site scripting i sposobach zapobiegania im w Node. Ponieważ osoby atakujące wykorzystują luki w Twojej aplikacji, aby wstrzyknąć złośliwy kod na serwer, zawsze dbaj o to, aby oczyścić dane wejściowe użytkownika. W ten sposób usuwasz złośliwy kod, zanim aplikacja go zapisze lub wykona.