2010-01-08 10 views
6

W zamiarem zapobiegania atakom XSS, jestem aktualizowanie strony, w których mamy pole tekstowe, który akceptuje HTML, zapisuje je w bazie danych i pobiera i oddaje go w późniejszym czasie.Korzystanie z biblioteki MS Anti XSS do odkażania HTML

Rozumiem, że mogę zdezynfekować HTML przy użyciu AntiXSS.GetSafeHtmlFragment() metody. Tak długo, jak robię to przed przechowywaniem kodu HTML w bazie danych, czy jestem objęty? Czy muszę coś zrobić, gdy HTML jest wyprowadzany na stronie internetowej?

Ponadto, wydaje się, że biała lista jest rodzajem czarnej skrzynki. Czy istnieje sposób aktualizacji w oparciu o nasze wymagania?

Odpowiedz

4

Powinieneś być ustawiony. Choć oczywiście nie ochroni cię to przed niczym już w bazie danych.

Można użyć AntiXSS.GetSafeHtmlFragment() podczas wyprowadzania stronę zamiast podczas zapisywania. Ale robienie tego podczas oszczędzania jest prawdopodobnie bezpieczniejsze. Nie chcesz tego robić jednocześnie podczas renderowania i zapisywania.

Biała lista nie jest edytowalna.

+0

Niestety AntiXSS.GetSafeHtmlFragment() okazał się być podatny na starszej wersji i bezużyteczny w nowszej wersji (paski IT możliwe prawie wszystkie znaczniki HTML). – BornToCode

1

Już prawie jesteś. Musisz upewnić się, że you choose the proper encoding. Na przykład, jeśli użytkownik wprowadził adres URL, musiałbyś użyć AntiXSS.UrlEncode(), a jeśli przeszedł do JavaScript, to chciałbyś użyć AntiXSS.JavaScriptEncode(). Jeśli nie możesz zagwarantować, kiedy zapisujesz dane wejściowe, jaki będzie format wyjściowy, lepiej jest przeprowadzić sanityzację w czasie wyjściowym.

+0

... pamiętając, aby zdezynfekować dla SQL Injection –

+0

Tak więc, jeśli użytkownik wpisze HTML że sanitacji użyciu GetSafeHtmlFragment, bym wtedy trzeba kopać throgh wszystkich adresów URL (a href) i kod JS i passit przez AntiXSS.UrlEncode i AntiXSS. JavaScriptEncode? – Nick

+0

Musisz wyjść z wyjścia dla kontekstu, w którym będzie on używany. Ogólnie rzecz biorąc, ludzie osiągają to poprzez użycie systemu szablonów, który autoescapes rzeczy, jak są one wyprowadzane, zamiast sprawdzania każdego pojedynczego pola indywidualnie. Przeczytaj cały artykuł, który łączyłem, powinien pomóc: http://msdn.microsoft.com/en-us/library/aa973813.aspx – Annie

3

W odniesieniu do Twojego pytania o „czarnej skrzynki”: tak, to jest czarna skrzynka, a moje zrozumienie jest, że nie można go edytować. Jeśli szukasz większej szczegółowości, sprawdź numer AntiSamy.NET project.

Powiązane problemy