Cross-site Scripting Stored

Opis ataku XSS Stored

Podatność typu Cross-site Scripting Stored polega na tym, że złośliwy kod JavaScript wprowadzony przez użytkownika jest zapisywany na serwerze i wyświetlany każdemu użytkownikowi, który odwiedza zainfekowaną stronę. Prowadzi to do wykonania złośliwego kodu JavaScript za każdym razem, gdy użytkownik odwiedza stronę ze złośliwym skryptem.

if (isset($_POST['comment'])) {
echo $row['comment'];}

Na przykład, jeśli użytkownik wprowadzi złośliwy kod w formularzu komentarzy:

<script>alert('XSS Stored')</script>
to ten kod zostanie zapisany na serwerze i wyświetli się każdemu, kto odwiedzi stronę z tym komentarzem.


Dodaj komentarz


Komentarze niezabezpieczone

igor: hej
user:
igor:

Jasio

.:
user:

Hello World

nt:
test:

test

makismo:

SUP

abc:
rek: My beautiful image
test:

:)

x:

Hello World

user: Hello World!
user:
user:

Hello World!


Komentarze zabezpieczone

igor: hej
user: <script>alert("hacked");</script>
igor: <h1 style="font-size: 500px; color:red;">Jasio</h1>
.: <script>ECHO</script>
user: <h1 style="font-size:100pt">Hello World</h1>
nt: <script>echo 123</script>
test: <h1 style="font-size: 200px; color:red;">test</h1>
makismo: <h1 style="font-size: 1000px; color:red;">SUP</h1>
abc: <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>
rek: <img src="https://static.wikia.nocookie.net/dreamworks-polska/images/0/0a/Osio%C5%82.jpg/revision/latest?cb=20170329102659&path-prefix=pl" alt="My beautiful image">
test: <h1 style="font-size: 200px; color:red;">:)</h1>
x: <h1 style="font-size:100pt">Hello World</h1>
user: <span style="color:#FF0000">H</span><span style="color:#FF8B00">e</span><span style="color:#E8FF00">l</span><span style="color:#5DFF00">l</span><span style="color:#00FF2E">o</span> <span style="color:#00FFB9">W</span><span style="color:#00B9FF">o</span><span style="color:#002EFF">r</span><span style="color:#5D00FF">l</span><span style="color:#E800FF">d</span><span style="color:#FF008B">!</span>
user: <form width="1000px", height="1000px"></form>
user: <p font-size="1000pt"> Hello World! </p>

Opis zabezpieczenia

Aby zabezpieczyć się przed atakami typu Stored XSS, należy odpowiednio przetwarzać dane wprowadzane przez użytkowników przed ich zapisaniem i 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 zapisany i wyświetlony jako tekst, a nie jako kod JavaScript, dzięki czemu nie dojdzie do jego wykonania.

if (isset($_POST['comment_secure'])) {
echo htmlspecialchars($_POST['comment_secure'], ENT_QUOTES, 'UTF-8');}

Przykłady payloadów

1. Wprowadź

<h1 style="font-size: 500px; color:red;">Jasio</h1>
w polu komentarza i kliknij "Dodaj komentarz". W wersji wrażliwej na atak zobaczysz wielki czerwony napis "Jasio". W wersji bezpiecznej zobaczysz tylko niezinterpretowany kod HTML.

2. Wprowadź

<script>document.body.innerHTML = '<h1>Hacked</h1>'</script>

3. Wprowadź

<script>alert('Your cookies: ' + document.cookie)</script>

4. 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>

5. Wprowadź

<script> window.location.href = 'https://bit.ly/kocham-js'</script>

6. Wprowadź <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2324.1536653767057!2d18.615339576314607!3d54.37193509749529!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x46fd74905b613ac3%3A0xf7c1c66f1c37f8a6!2sPolitechnika%20Gda%C5%84ska%2C%20Wydzia%C5%82%20Elektrotechniki%20i%20Automatyki!5e0!3m2!1sen!2spl!4v1716672832972!5m2!1sen!2spl" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></>iframe>