Jak zapobiegać skryptom między witrynami za pomocą HTML, JavaScript i DOM

Jak zapobiegać skryptom między witrynami za pomocą HTML, JavaScript i DOM

Cross-Site Scripting, powszechnie znany jako XSS, jest jedną z najniebezpieczniejszych metod ataków stosowanych przez cyberprzestępców, dlatego bardzo ważne jest, aby każdy programista i badacz bezpieczeństwa wiedział, co to jest i jak zapobiegać atakom. Jak więc możesz podjąć działania przeciwko luce w zabezpieczeniach XSS? Używasz HTML, JavaScript lub DOM, aby pokazać dane, które witryna otrzymuje od użytkownika. Jeden lub więcej z tych trzech różnych obszarów może ze sobą współpracować.

Jak zapobiegać XSS przy użyciu HTML

XSS umożliwia atakującym umieszczanie złośliwych kodów lub skryptów na stronach internetowych, celując w niczego niepodejrzewających użytkowników odwiedzających witrynę. Może to wykraść dane osobowe, przekierować odwiedzających do innej witryny utworzonej przez cyberprzestępcę lub w inny sposób zmienić wygląd strony internetowej. Ale możesz temu zapobiec; na przykład, powstrzymując ich przed wstawianiem kodu HTML.

Wyobraź sobie, że masz stronę internetową z księgą gości. Załóżmy, że Twoi goście korzystający z tej księgi gości mogą tu wpisywać swoje nazwiska i wiadomości, a ich wiadomości mogą być przeglądane publicznie. Atakujący, który chce wykonać test XSS w Twojej księdze gości, wykorzysta obszar, który przeznaczyłeś na napisanie wiadomości. Ten cyberprzestępca uruchomi tutaj kod JavaScript. Na przykład osoba atakująca może użyć kodu JavaScript, takiego jak:

<script>alert("The XSS!")</script>

Aby odnieść sukces, osoba atakująca musi użyć znacznika skryptu. Jeśli tego nie zrobią, kod JavaScript nie będzie działał. Musisz zakodować instrukcję <, aby użytkownicy nigdy nie mogli używać tagów HTML. Utrudni to atakującemu pracę z tagami HTML.

Jak zapobiegać XSS przy użyciu JavaScript

spraw, aby kody javascript były odporne na xss

Logika w HTML jest również poprawna w JavaScript. W niektórych aplikacjach istnieje możliwość wydrukowania danych otrzymanych przez serwis od użytkownika za pomocą kodu JavaScript.

Rozważ to kodowanie:

<p id="print"></p>
<script>
document.getElementById("test").innerHTML = "";
</script>

Wyobraź sobie, że witryna korzysta z bloku kodu, takiego jak ten powyżej. Deweloper użył tutaj znacznika „p” o nazwie „print”. Jak widać z kodu, wartość będzie pochodzić z parametru „search”, a programista chce pokazać tę wartość przychodzącą w tagu „p”. Deweloper, który wykonał tę operację, chciał użyć funkcji innerHTML JavaScript.

Teraz spójrzmy na sytuację z punktu widzenia cyberatakującego. W takim przypadku atakujący wykona test XSS w obrębie tagu „script”. W tym celu atakujący nie musi ponownie uruchamiać tagu, ponieważ tag „script” jest już używany. Atakujący może następnie napisać taki test:

filename.php?search=a" alert("The XSS!"); f= "

Ten kod pojawi się na stronie jako:

document.getElementById("test").innerHTML = " a" alert("The XSS!"); f=" ";

Ten atak by się udał. Aby lepiej zrozumieć problem, przeanalizujmy jeszcze jedną przykładową technikę, której może użyć atakujący. Haker mógł zastosować test XSS, taki jak:

filename.php?search=";</script><em>Fatih</em>

Tak by to wyglądało oglądane ze strony internetowej:

document.getElementById("test").innerHTML = " ";</script><em>Fatih</em> ";

Może się to wydawać trochę dziwne, ponieważ atakujący zamknął pierwszy tag „script”, używając tutaj struktury takiej jak „/script”. Atakujący może więc zrestartować dowolny kod JavaScript i HTML.

Jeśli pomyślisz o tych dwóch różnych przykładach, ochrona przed XSS wydaje się całkiem prosta. Niezbędnym środkiem ostrożności byłoby zakodowanie znaków i , które widzisz w pierwszym przykładzie. W drugim przykładzie zakoduj znaki < i > .

Jak zapobiegać XSS przy użyciu DOM

W tym wariancie XSS dane, które strona otrzymuje od użytkownika, mogą ingerować we właściwości elementu DOM. Na przykład informacje o kolorze, które witryna otrzymuje od użytkownika, mogą wpływać na kolor tła tabeli lub całego tła strony. Tak więc użytkownik nieświadomie ingeruje w układy stylów korpusu i stołu. Poniższy kod jest tego dobrym przykładem:

<body bgcolor="<?php echo $_GET['color'];? >"/>

W tym celu witryna korzysta z parametru „kolor” otrzymanego od użytkownika bezpośrednio we właściwości „bgcolor” elementu „body”. Co w takim razie mógł zrobić atakujący? Mogą wykonać ten złośliwy kod:

filename.php?color=red" onload="alert('The XSS!')

Wygląda to tak, gdy ogląda się je ze strony internetowej:

<body bgcolor=" red" onload="alert('The XSS!') "/>

Aby temu zapobiec, programista musiałby zakodować znak .

Należy jednak zwrócić uwagę na jeszcze jeden ważny element JavaScript. Poniższy fragment kodu jest tego przykładem:

<a href="javascript:alert('The XSS!')">

Oznacza to, że możliwe jest bezpośrednie uruchomienie kodu JavaScript. Jednym z najlepszych środków zapobiegawczych jest upewnienie się, że witryna sprawdza, czy dane, które otrzymuje od użytkowników, to prawdziwy adres URL. Najprostszą metodą jest upewnienie się, że w połączeniu występują wyrażenia takie jak „HTTP” i „HTTPS” (bezpieczna wersja protokołu HTTP).

Przykładowa funkcja zapobiegająca XSS za pomocą PHP

Chroń swoją witrynę przed atakami XSS za pomocą kodów php

Widziałeś kilka przykładów, jak chronić aplikację lub stronę internetową przed atakami XSS. Możesz użyć fragmentów kodu w tej tabeli z PHP:

Pamiętaj, że są to tylko przykłady i będą się różnić w zależności od używanego języka oprogramowania.

Możesz stworzyć aplikację internetową za pomocą PHP i wypróbować kody, które widzisz powyżej, aby je napisać. Jeśli zastanawiasz się, jak korzystać z tych wszystkich metod, możesz zaczerpnąć kilka pomysłów z poniższego bloku kodu PHP, który powinien być przydatny, nawet jeśli używasz innego języka:

<?php
$data = $_GET['data'];

function in_attribute($str){
return htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT will encode the double quote (") character.
}

function in_html($str){
$link = '/^(((https?)|(\/\/))).*/';
if(!preg_match($link, $str))
{
return "/";
}
return $str;
}

$data = in_attribute($data);
$data = in_html($data);
$data = real_url(data);
?>

Chroń swoją witrynę przed XSS i nie tylko

XSS to popularny wektor ataku wykorzystywany przez hakerów. Zwykle wartość ścieżki w adresie URL, dowolne pole w Twojej witrynie, w którym można wprowadzać dane (takie jak pola formularzy i komentarzy), może służyć do testowania luki w zabezpieczeniach XSS. Ale oczywiście istnieje wiele różnych metod, których cyberprzestępcy mogą użyć do zaatakowania witryny, zwłaszcza jeśli masz witrynę, która ma wielu użytkowników i ukrywa ich informacje.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *