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
Komentarze zabezpieczone
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>
Jasio
Hello World
test
SUP
:)
Hello World
Hello World!