2009-08-03 15 views
5

Mam typową sytuację, w której mam dane wejściowe użytkownika, które używają podzbioru HTML (dane wejściowe z tinyMCE). Potrzebuję ochrony po stronie serwera przed atakami XSS i szukam sprawdzonego narzędzia, za pomocą którego ludzie to robią. Po stronie PHP widzę wiele bibliotek, takich jak HTMLPurifier, które wykonują zadanie, ale nie mogę znaleźć niczego w .NET.Biała lista HTML .NET HTML (skrypty anty-xss/Cross Site)

Szukam zasadniczo dla biblioteki do filtrowania w dół do białej listy znaczników, atrybutów tych tagów, i robi to, co trzeba z „trudnym” atrybuty jak: href i IMG: src

I Widziałem post Jeffa Atwooda na http://refactormycode.com/codes/333-sanitize-html, ale nie wiem, jak to jest aktualne. Czy ma to jakikolwiek wpływ na to, czego obecnie używa strona? I w żadnym wypadku nie jestem pewien, czy nie czuję się dobrze z tą strategią, próbując wyreformować poprawne dane wejściowe.

Ten blogu określa się, co wydaje się być o wiele bardziej przekonujące strategia:

http://blog.bvsoftware.com/post/2009/01/08/How-to-filter-Html-Input-to-Prevent-Cross-Site-Scripting-but-Still-Allow-Design.aspx

Metoda ta jest właściwie przeanalizować HTML do DOM, potwierdzić, że potem odbudować prawidłową HTML z niego. Jeśli parsowanie HTML może obsługiwać źle sformułowany HTML, to świetnie. Jeśli nie, to nic wielkiego - mogę wymagać dobrze sformułowanego HTML, ponieważ użytkownicy powinni używać edytora tinyMCE. W obu przypadkach przepisuję to, co wiem, że jest bezpieczny, dobrze sformułowany kod HTML.

Problem polega na tym, że jest to tylko opis, bez linku do żadnej biblioteki, która faktycznie wykonuje ten algorytm.

Czy taka biblioteka istnieje? Jeśli nie, to jaki byłby dobry mechanizm analizowania HTML .NET? A jakie wyrażenia regularne powinny być używane do dodatkowej weryfikacji a: href, img: src? Czy brakuje tu czegoś ważnego?

Nie chcę ponownie wdrażać koła buggy tutaj. Z pewnością jest kilka powszechnie używanych bibliotek. Jakieś pomysły?

Odpowiedz

3

Cóż, jeśli chcesz analizować i obawiasz się o niepoprawny (x) kod HTML, to najprawdopodobniej najlepiej jest użyć do parsowania. Pamiętaj, że to nie tylko elementy, ale także atrybuty dozwolonych elementów, które musisz dopuścić (oczywiście powinieneś pracować na dozwolonej białej liście elementów i ich atrybutów, zamiast próbować usuwać rzeczy, które mogą być niepotrzebne przez czarną listę)

Jest też wersja OWASP AntiSamy Project, która jest w toku - mają również test site możesz spróbować XSS

Regex za to jest prawdopodobnie zbyt ryzykowny IMO.

+0

Paczka agility jest tym, z czego skorzystałem. – Clyde

1

Miałem dokładnie ten sam problem kilka lat temu, kiedy używałem TinyMCE.

Nadal nie ma żadnych porządnych rozwiązań XSS/HTML white-listing dla .Net, więc dodałem rozwiązanie, które stworzyłem i używam od kilku lat.

http://www.codeproject.com/KB/aspnet/html-white-listing.aspx

Biała lista defnintion opiera się na ważnych elementach TinyMCE-tych.

Take Two: Rozglądając Microsoft niedawno wydany białą listę opartą Anti-XSS Library (V3.0), to sprawdzić:

Microsoft Anti-Cross Site Scripting Library V3 .0 (Anti-XSS V3.0) to biblioteka kodująca zaprojektowana dla pomagająca programistom chronić ich aplikacje internetowe przed atakami XSS . Różni się ona od większości bibliotek kodujących tym, że wykorzystuje technikę białą listingu - czasami nazywaną zasadą inkluzji - w celu zapewnienia ochrony przed atakami XSS .To podejście działa przez zdefiniowanie pierwszego lub dopuszczalnego zestawu znaków, a koduje wszystko poza tym zestawem (nieprawidłowe znaki lub potencjalne ataki ). Podejście do białej listy ma kilka zalet w porównaniu z innymi schematami kodowania . Nowe funkcje w tym wersji Microsoft Anti-Krzyż Site Scripting biblioteki obejmują: - An rozszerzoną białą listę, która obsługuje więcej języki - poprawę osiągów - arkusze danych Wydajność (w internetowym pomoc) - Wsparcie dla Shift_JIS kodujących dla mobilnych przeglądarek - próbkę aplikacyjnych - Bezpieczeństwo Runtime Silnik moduł (SRE) HTTP

3

Microsoft ma biblioteki open-source w celu ochrony przed XSS: AntiXSS.

+0

Co jest nie tak z tą odpowiedzią? Dlaczego została odrzucona? –

+2

Well AntiXSS to tylko kodowanie, to nie jest narzędzie do usuwania lub białej listy (jeszcze). – blowdart

+1

OK, dziękuję. Nie używałem go sam, więc prawdopodobnie powinienem trzymać się zaleceń, które znam. –

2

http://www.microsoft.com/en-us/download/details.aspx?id=28589 Możesz pobrać wersję tutaj, ale połączyłem ją z przydatnym plikiem DOCX. Moją preferowaną metodą jest użycie menedżera pakietów NuGet do pobrania najnowszego pakietu AntiXSS.

Można użyć zestawu HtmlSanitizationLibrary znalezionego w bibliotece 4.x AntiXss. Zauważ, że GetSafeHtml() znajduje się w bibliotece HtmlSanitizationLibrary, w Microsoft.Security.Application.Sanitizer.

0

https://github.com/Vereyon/HtmlRuleSanitizer dokładnie rozwiązuje ten problem.

Miałem to wyzwanie podczas integracji edytora wysihtml5 w aplikacji ASP.NET MVC. Zauważyłem, że miał on bardzo ładny, ale prosty, oparty na białej liście środek dezynfekujący oparty na listach, który wykorzystywał reguły, aby umożliwić przejście podzbioru HTML. Wdrożyłem wersję po stronie serwera, która zależy od pakietu HtmlAgility do parsowania.

Microsoft Web Protection Library (dawniej AntiXSS) wydaje się po prostu wyrwać prawie wszystkie tagi HTML iz tego co przeczytałem nie można łatwo dopasować reguł do podzestawu HTML, którego chcesz użyć. To nie była dla mnie opcja.

Ten model wygląda bardzo obiecująco i byłby moim drugim wyborem.

Powiązane problemy