2010-10-25 13 views
12

Mam aplikację ASP.NET Web Forms. Istnieje strona z TextBoxami i użytkownicy wprowadzają do nich wyszukiwane hasła, które służą do wysyłania zapytań do bazy danych.How to HTML.Encode w formularzach internetowych

Wiem, że muszę zapobiegać atakom wtryskowym JavaScript. Jak mam to zrobic?

W MVC użyłbym Html.Encode. Wygląda na to, że nie jest rozpoznawany w Web Forms.

Dzięki!

Odpowiedz

3

Można użyć Server.HtmlEncode (co przekłada się na HttpServerUtility.HtmlEncode), ale Microsoft ma lepszą bibliotekę Web Protection nazwie AntiXSS, które można pobrać z CodePlex. Zawiera narzędzie, które używa podejścia z białą listą do HtmlEncoding (dużo bezpieczniej i lepiej, i recommended by OWASP, chociaż wskazują one na older version). Posiada również narzędzia, które pozwalają uzyskać bezpieczne fragmenty HTML itp.

Jeśli jednak spojrzysz na nic innego, spójrz na numer OWASP top 10. Wygląda na to, że po prostu zarysowujesz powierzchnię bezpieczeństwa aplikacji internetowych i jest to najlepsze źródło informacji. Ataki typu Cross-Site Scripting to tylko jedna z wielu rzeczy, których musisz się bronić.

Jest to także jeden trzeba będzie odpowiadać, jeśli masz do czynienia z jakimkolwiek zgodności (PCI, Czerwona flaga, etc)

+0

Przykro mi, ale filtrowanie wejściowe anty-XSS naprawdę nie jest substytutem zwykłego tekstu kodującego HTML na etapie wyjściowym do HTML. Wszystkie narzędzia anty-XSS są kruche, poprawne i niekompletne: w najlepszym wypadku tynk samoprzylepny dla źle napisanych aplikacji z problemami uciekającymi HTML, a nie lekarstwo, które faktycznie rozwiązuje problem. – bobince

+0

Prosimy o komentarz, jeśli nie chcesz, abym mógł nauczyć się z moich błędów ... – David

+0

(Przepraszamy za wersję -ve, ale jest to poważny problem z naiwnymi autorami webappów, że trzymają razem różne formy danych wyjściowych z ciągów tekstowych bez Do wykonania określonego zadania wymagane jest wychwytywanie kodu HTML, kodowanie JSON, kodowanie URL lub jakikolwiek inny rodzaj kodowania kontekstowego, a następnie oczekują, że warstwa anty-XSS filtrująca dane wejściowe jakoś to wszystko naprawi. więcej niż szczotkowanie problemów pod dywan.) – bobince

4

Na webforms można nazwać

HttpUtility.HtmlEncode(foo); 

Należy uważać, aby nie podwójnie kodować.

+0

+1 dla "uważaj, aby nie podwójnie kodować". 1. kodowanie => [<test>], drugie kodowanie => [& lt; test & gt;] – Stacked

3

Jeśli jesteś na ASP.NET 4 lub nowszy, można użyć tej składni:

<%: Model.Username %> 

który HTML zakodować ekspresję. Scott Gu explains the benefit of this syntax:

Wybraliśmy <%:%> składni, tak, że będzie łatwo i szybko zastąpić istniejące instancje bloków <% =%> kodowych. Umożliwia także łatwe wyszukiwanie w bazie kodu dla elementów <% =%>, aby znaleźć i zweryfikować wszystkie przypadki, w których nie używasz kodowania HTML w aplikacji, aby zapewnić prawidłowe zachowanie.