2010-02-25 15 views
11

Poprzez przekształcenie następujących ("The Big 5"):Czy kodowanie HTML zapobiega wykorzystaniu zabezpieczeń XSS?

& -> & 
< -> &lt; 
> -> &gt; 
" -> &#034; 
' -> &#039; 

Można zapobiec atakom XSS?

Sądzę, że trzeba również białą listę na poziomie postaci, aby zapobiec certain attacks, ale following answer stwierdza, że ​​komplikuje sprawy.

EDYTOWANIE To page szczegóły it does not prevent more elaborate injections, does not help with "out of range characters = question marks" when outputting Strings to Writers with single byte encodings, nor prevents character reinterpretation when user switches browser encoding over displayed page. W istocie samo ucieczkę z tych znaków wydaje się dość naiwne podejście.

+1

... Wikipedia mówi: „Warto zauważyć, że mimo iż jest powszechnie zalecane, po prostu wykonując kodowanie encji HTML na pięć znaczących znaków XML nie zawsze wystarcza, aby zapobiec wielu formom XSS. Kodowanie może być trudne, a korzystanie z biblioteki kodującej zabezpieczenia jest wysoce zalecane. " i cytuje ten artykuł, ale nie mogę znaleźć w tym artykule uzasadnienia: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet –

+1

Jest to tylko trudne, jeśli nie wiesz co robisz lub robisz to w różnych (niewłaściwych) miejscach. Po prostu bądź z nim zgodny. Zakodować/uciec WSZYSTKIE wejścia kontrolowane przez użytkownika (adres URL żądania, parametry żądania, treść żądania, itd ..etc .. wszystko, co pochodzi od użytkownika) tylko raz podczas (ponownego) wyświetlania ich w warstwie widoku. To wszystko. – BalusC

+0

Hey Pool - Czy chcesz zmienić preferowaną odpowiedź? Odpowiedź od @bobince jest lepsza i ma więcej upvotes. – nslntmnx

Odpowiedz

9

Czy zapobiegniesz atakom XSS?

Jeśli nie to ucieczce w odpowiednim czasie (*), a następnie tak, będzie zapobiegać HTML-zastrzyk. Jest to najczęstsza forma ataku XSS. Nie jest to tylko kwestia bezpieczeństwa, tak czy inaczej trzeba wykonywać polecenia ucieczki, aby ciągi zawierające te znaki wyświetlały się poprawnie. Kwestia bezpieczeństwa jest podzbiorem kwestii poprawności.

myślę, że trzeba do białej listy na poziomie znaków też, aby zapobiec niektórym atakom

nr HTML-Cytowanie uczyni każdy z tych ataków jak nieaktywnej postaci zwykłego tekstu na stronie, która jest to, czego chcesz. Zakres ataków na tę stronę demonstruje różne sposoby wykonywania iniekcji HTML, które mogą ominąć głupsze "filtry XSS", które niektóre serwery wdrażają, aby spróbować zapobiec częstym atakom wtrysku HTML. To pokazuje, że "filtry XSS" są z natury nieszczelne i nieskuteczne.

Istnieją inne formy ataku XSS, które mogą lub mogą nie mieć na ciebie wpływu, na przykład złe schematy na identyfikatorach URI przesłanych przez użytkownika (javascript: i innych), wstrzyknięcie kodu do danych zapisanych w bloku JavaScript (gdzie potrzebujesz JSON- style escaping) lub do arkuszy stylów lub nagłówków odpowiedzi HTTP (ponownie, zawsze potrzebujesz odpowiedniej formy kodowania, gdy upuszczasz tekst do innego kontekstu, zawsze powinieneś podejrzewać, jeśli zobaczysz coś z nieokreśloną interpolacją, taką jak PHP "string $var string").

Następnie przesyłanie plików, zasady początków Flash, długie sekwencje UTF-8 w starszych przeglądarkach i problemy z generowaniem treści na poziomie aplikacji; wszystkie te mogą potencjalnie prowadzić do skryptów cross-site. Ale wtłaczanie HTML jest głównym, z którym każda aplikacja internetowa będzie musiała się zmierzyć, a większość aplikacji PHP się dzisiaj pomyli.

(*: czyli podczas wstawiania treści tekstowych do HTML, ani w żadnym innym czasie. Nie wpisuj danych HTML-u w formularzu $_POST/$_GET na początku skryptu, jest to często błędny błąd.)

+0

I to jest to. – BalusC

4

Miary liczników zależą od kontekstu, w którym są wstawiane dane. Jeśli wstawisz dane do HTML, zastąpienie meta-znaku HTML sekwencjami specjalnymi (tzn. Odwołaniami do znaków) uniemożliwia wstawienie kodu HTML.

Ale jeśli w innym kontekście (np. Wartość atrybutu HTML interpretowana jako adres URL), masz do czynienia z dodatkowymi meta znakami z różnymi sekwencjami ucieczki.

Powiązane problemy