Możliwość wpisania w formularz kodu HTML ma swoje ogromne zalety, szczególnie jeśli wymagane jest wprowadzenie dłuższego tekstu. Z użyciem HTML można go w końcu podzielić na paragrafy, pogrubić ważniejsze wyrażenia, a w znaczniki <script> wsadzić złośliwe oprogramowanie w JavaScript... ups. No właśnie tutaj zaczyna się problem.
CO TO JEST XSS?
Definicja ataku XSS (cross-site scripting) jest dokładnie taka: rodzaj podatności, który pozwala atakującemu wprowadzić ze strony klienta złośliwe skrypty. Taki "atak" może nastąpić bezpośrednio z przeglądarki, na przykład poprzez wpisanie do formularza, który wysyła do bazy danych dane, złośliwego skryptu - lub odwrotnie, przesłanie do strony lub aplikacji webowej danych już zawierających takowy. Jest to jedna z najpowszechniej występujących podatności i jedna z najczęściej lekceważonych. Tymczasem już niewinne wyświetlenie na stronie alertu sporządzonego przez hakera może spowodować duże szkody, jeżeli przekierowywałby on na przykład do złośliwego oprogramowania...
JAK SIĘ BRONIĆ PRZED XSS?
Odpowiedź to kilka słów-kluczy: whitelista, sanityzacja kodu, escape(). Przyjrzyjmy się im.
Teoretycznie najbardziej oczywistym sposobem obronienia się przed tagiem <script> jest... zabronienie używania tagu <script>. To jednak droga donikąd, bo wystarczy niewinne:
<scr<script>ipt>
byśmy znaleźli się w punkcie wyjścia. Dlatego o wiele lepiej jest przyjąć odwrotne podejście - zezwolić tylko na określone tagi HTML, których użytkownik może potrzebować, typu <b>, <i> i tak dalej.
W tym celu właśnie trzeba kod oczyścić. Należy w tym celu zastosować funkcję, która wyszukuje tagi HTML, kontroluje czy znajdują się one na "białej liście", usuwa te których na niej nie ma. Istnieją do tego specjalne biblioteki, jedną z najbardziej rozwiniętych jest DOMPurify.
W bardzo podobny sposób jak własny sanitizer można wykorzystać funkcję escape(), a przynajmniej było to możliwe w przeszłości, obecnie została bowiem zdeprecjonowana. Wciąż jednak działa, funkcjonuje, a są i tacy, którzy uznają, że jak długo jest - należy brać. Dla JavaScriptowców to na pewno najszybszy i najprostszy sposób na pozbycie się niechcianego kodu z formularzy.
XSS to powszechna podatność, co wydaje się absurdalne, kiedy przeanalizujemy jak łatwo się jej pozbyć. Nie jest to ani kosztowne, ani skomplikowane zadanie. Jedyne czego wymaga to wiedza o jego istnieniu i zastosowanie kilku prostych metod ochrony. Zaoszczędzi nam to w najlepszym razie wstydu, a w najgorszym sporego kłopotu.
>>> Artykuł na StackOverflow o XSS <<<
>>> O XSS w Wikipedii <<<
>>> Użycie DOMPurify <<<
>>> escape() w dokumentacji <<<
Komentarze
Prześlij komentarz
Komentarze są moderowane. Nie ma cenzury, bronię się przed spamem. :)