Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML][PHP]Zabezpieczenie przed XSS
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam wszystkich.
Mam pewien problem. Posiadam na stronie formularz, który jest do wypełniania przez użytkowników i podczas testów coś mnie zaniepokoiło.
Po wpisaniu w pole formularza:

Kod
" /><script type="text/javascript">
alert("Uwaga!");
</script>


i przesłaniu go na ekranie pojawia się komunikat alert o treści Uwaga!.
Jak można się przed tym zabezpieczyć?

Proszę o pomoc. Z góry dziękuje smile.gif
Wicepsik
A szukałeś już w google? Ten temat już był omawiany kilkaset razy...
lobopol
htmlspecialchars przy wyświetlaniu.
adrianozo
Dzięki wielkie smile.gif

Podziałało. Ja miałem napisaną funkcję, ale po prostu złe dane filtrowałem. Myślę, że teraz jest ok

Napotkałem jeszcze jeden problem związany z XSS, ale od strony JS, a konkretniej jQuery.

Chodzi o to, że do selectów dynamicznych pobieram dane z bazy danych. I dajmy na to w bazie znajdzie się wartość:
Kod
<script type="text/javascript">
alert("Uwaga!");
</script>


I teraz dodaje dynamicznie wartości z selectów funkcją after() w jQuery. Po dodaniu tych wartości do strony wstrzykuje się kod JS, który automatycznie pokazuje alert o treści Uwaga!. W PHP tak jak kolega wyżej podał wystarczyło htmlspecialchars, natomiast jak przefiltrować zmienne w JS?
Poszukałem troszkę w google i znalazłem stronę:

http://javascript-ajax.pl/2009/12/01/html-...ode-javascript/

ale nie bardzo wydaje mi się, że to coś da.

Jakie są wasze opinie? Może macie jakieś pomysły jak takie coś zrobić, lub wykorzystać skrypt z powyżej podanej strony?
lobopol
pobierasz te wartości php i musisz je też nim wyświetlić, użyj htmlspecialchars
adrianozo
Wyświetlam je tak:

Kod
$('a.add').click(function()
    {
        var category = $("#category option:selected").text();
        var sub_category = $("#sub_category option:selected").text();
        var sub_sub_category = $("#sub_sub_category option:selected").text();
        var ilosc = $("#ilosc option:selected").text();
        $(this).after('<div id="htmlspecialcharsInput"><label><br /><br /><strong>Rodzaj:</strong> '+category+' - <strong>Produkt:</strong> '+sub_category+' - <strong>Kolor:</strong> '+sub_sub_category+' - <strong>Ilość:</strong> '+ilosc+' <a href="#del" class="del">X</a><input type="hidden" name="cat[]" value="<strong>Rodzaj:</strong> '+category+' - <strong>Produkt:</strong> '+sub_category+' - <strong>Kolor:</strong> '+sub_sub_category+' - <strong>Ilość:</strong> '+ilosc+' "/></label></div>');
        return false;
    });


Więc nie robię tego w PHP. Dopiero jak klient wyśle formularz do PHP postem to wtedy je filtruje jako PHP, ale dodawane jest dynamicznie więc jak je doda to wyrzuca alerta, bo dodał jedną z opcji, którą jest:

Kod
<script type="text/javascript">
alert("Uwaga!");
</script>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.