Ataki XSS i formy obrony

Ataki XSS, polegają najczęściej na przekazaniu skryptu JavaScript, którego zadaniem jest zaszkodzić. Bronić się przed nimi można na wiele sposobów. W tym wpisie wykorzystuje ASP WebForms, ale wszystko co zostanie opisane można zastosować w aplikacjach ASP MVC.
Domyślnie strony ASP są chronione przed atakami XSS. Możemy się o tym przekonać budując prosty formularz z polem tekstowym w który można wpisać skrypt:

xss1

Przy próbie przesłania takiego formularza, serwer zwróci błąd:

xss2

Jest to spowodowane pewnym wpisem, lub jego brakiem (domyśla wartość true) w pliku web.config:
Niekiedy istnieje potrzeba wyłączenia tego mechanizmu (najczęściej na pojedynczych stronach w obrębie aplikacji), np. kiedy chcemy umożliwić użytkowniki formatowanie wpisów przy pomocy znacznik HTML.

Mam prosty formularz:

Jego obsługa:

Całość po wpisaniu skryptu JavaScript wygląda tak:

xss3

Jak się bronić? Jest wiele sposobów. Jednym z nich jest użycie funkcji Server.HtmlEncode:

xss4

Jak widać działa, ale co zrobić gdy chcemy formatować tekst np. przy pomocy znaczników „<b>” czy „<i>”? Można zrobić taki trik:

xss5

Wybiórcze dodawanie dozwolonych tagów, może być nieco kłopotliwe, w miarę zwiększania ich ilości. Żeby temu zaradzić można napisać metodę RemoveXss, która wykorzystuje wyrażenia regularne:

Jej użycie jest bardzo proste:

xss6

Share
Tags:  , , , ,

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Time limit is exhausted. Please reload the CAPTCHA.