Cross-site Scripting Reflected
Opis ataku XSS Reflected
Podatność typu Cross-site Scripting Reflected polega na tym, że wprowadzone dane przez użytkownika są wyświetlane na stronie bez uprzedniej sanityzacji, czyli sprawdzenia na backendzie aplikacji, czy wprowadzone dane nie zawierają znaczników HTML czy kodu JS. Niesanityzowanie wejścia może prowadzić do wykonania dowolnego złośliwego kodu JavaScript.
if (isset($_GET['name'])) {
echo "Witaj " . $_GET['name'] . "!";}
Na przykład, jeśli użytkownik wprowadzi w polu tekstowym:
<script>alert('XSS')</script>
to po przesłaniu formularza, przeglądarka wykona ten kod JavaScript, co doprowadzi do wyświetlenia alertu z napisem "XSS".
Formularz podatny na atak
Wynik wysłania formularza:
(jeszcze nie wysłano formularza)
Zabezpieczony formularz
(jeszcze nie wysłano formularza)
Opis zabezpieczenia
Aby zabezpieczyć się przed atakami typu Reflected XSS, należy odpowiednio przetwarzać dane wprowadzane przez użytkowników przed ich wyświetleniem na stronie. Jednym ze sposobów jest użycie funkcji htmlspecialchars
która konwertuje specjalne znaki na ich bezpieczne odpowiedniki HTML.
W bezpiecznej wersji formularza, jeśli użytkownik wprowadzi złośliwy kod, to zostanie on wyświetlony na stronie jako tekst, a nie jako kod JavaScript, dzięki czemu nie dojdzie do jego wykonania.
if (isset($_GET['name_secure'])) {
echo "Witaj " . htmlspecialchars($_GET['name_secure'], ENT_QUOTES, 'UTF-8') . "!";}
Przykłady payloadów
1. Wprowadź
<h1 style="font-size: 500px; color:red;">Jasio</h1>
w polu tekstowym i kliknij "Wyślij formularz". W wersji wrażliwej na atak zobaczysz wielki czerwony napis "Jasio". W wersji bezpiecznej zobaczysz tylko niezinterpretowany kod HTML.
3. Wprowadź
<script>document.body.innerHTML = '<h1>Hacked</h1>'</script>
4. Wprowadź
<script>alert('Your cookies: ' + document.cookie)</script>
5. Wprowadź
<iframe width="560" height="315" src="https://www.youtube.com/embed/dQw4w9WgXcQ?si=cxUyYkeDs3rk_qd9" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
6. Wprowadź
<script> window.location.href = 'https://bit.ly/kocham-js'</script>