Skydda er mot XSS!

Robert Folkesson har nämnt hur viktigt det är att skydda sig mot XSS, vilket är ett väldigt viktigt ämne.

Jag försökte posta en kommentar till hans inlägg, men på grund av något strul med MSDN-bloggarna så verkar det inte ha kommit fram, så jag tänkte att jag skapar ett eget inlägg om det.

Det är skrämmande att så många företag inte skyddar sig mot XSS. Det var för inte allt för länge sedan ett stort antivirusföretag som släppte igenom ett javascript på detta sätt.

Vi som kör ASP.NET är dock lyckligt lottade! Först och främst så har vi fr.o.m. ASP.NET 1.1 ValidateRequest som skyddar från input via Querystrings och forms (om man inte har inaktiverat det).

Sen så finns även Microsoft Anti-Cross Site Scripting Library (lagom långt namn ;-)) som gör det möjligt att ge ett ännu starkare skydd än att bara köra Server.HtmlEncode().

ValidateRequest och annat:
http://msdn.microsoft.com/en-us/library/ms998274.aspx

Microsoft Anti-Cross Site Scripting Library v1.5:
http://www.microsoft.com/downloads/details.aspx?FamilyId=EFB9C819-53FF-4F82-BFAF-E11625130C25&displaylang=en

Eller betan av v3.0 (vad hände med 2.0?):
http://www.microsoft.com/downloads/details.aspx?familyid=051EE83C-5CCF-48ED-8463-02F56A6BFC09&displaylang=en

Dessutom så kan vi sitta ännu säkrare iom Internet Explorer 8, då det har inbyggt skydd mott XSS typ 1:
http://blogs.msdn.com/ie/archive/2008/07/01/ie8-security-part-iv-the-xss-filter.aspx

Det som dock ingen webbläsare kan skydda sig mot är XSS typ 2, och där är det verkligen viktigt att vi som är utvecklare ser till att alltid skydda oss mot det så gott det går. Med tanke på hur vanligt det är med olika typer av CMS så är det inte alltid lätt att skydda exakt allt, men ofta så räcker det med att blockera script-taggar för att slippa de värsta problemen.

När du skriver en sida så lita aldrig på att information som kommer från användarna är bra information. Det är otroligt viktigt att skydda sig mot detta!

Kudos till Robert som tog upp detta!

4 Comments

  • Jag tycker man ofta får inaktivera ValidateRequest, då den spärrar på väldigt mycket.

    Dock skriver jag aldrig ut användares data rakt av, och jag använder mig av parametrar i mina databasfrågor.

  • Man bör aldrig inaktivera det i web.config då det öppnar för många säkerhetshål, men däremot är det ok att inaktivera det på de enskilda sidor där det verkligen behövs.

    Hur ofta behöver man posta HTML på en sida? Ta t.ex. den här sidan där man kan lämna kommentarer, finns det någon anledning till att göra det möjligt att skicka med HTML öht här?

  • Är ValidateRequest på som standard när man skapar en website i VWD?

    Om inte hur skriver man i web.config för att ha den igång och hur stänger man av den på speciella sidor?

  • Det har inget med verktyget att göra, utan är en del av ASP.NET sedan 1.1.

    Det är automatiskt aktiverat på alla sidor, vilket du kan se om du försöker gå in på t.ex.:
    MinSida.aspx?id=

    För att inaktivera det på en sida så skriver du validaterequest="false" i page-direktivet.

Comments have been disabled for this content.