Artikel om XSS

Computer Sweden skrev nyligen en artikel om XSS, där jag blev tillfrågad som “expert” om det. Det är bra att det skrivs artiklar och att det pratas om ämnet, men naturligtvis är det omöjligt att täcka *allt*. Därför blev vissa av mina synpunkter lite förkortade och det kanske är lite svårt att förstå vad jag menar med det – vilket jag såg på kommentatorerna. Därför, här följer lite klargöranden.

Höja abstraktionsnivån

Det jag menar med detta är att man som programmerare inte bör hantera strukturinformation av typen (pseudokod):
echo "
; "

Istället bör abstraktionsnivån vara på denna nivå :
page.add(new inputTextBox( query['name'] ) )
Syftet är att programmeraren inte ska behöva se till att göra rätt filtrering varje gång, det vill man hellre ha inbakat i ramverket man jobbar med. XSS uppstår (i regel) därför att dynamisk data, oftast användargenererad, tolkas som strukturdata. Det är i grunden samma problematik som SQL-Injections samt gamla format-string problem.

Det ena sättet att hantera det, ifall man jobbar med ett template-baserat system är att se till att varje gång man presenterar dynamisk data så konverterar man det på rätt sätt. Det andra är att helt separera de två typerna av information : ramverket (objektmodellen) hanterar uppbyggnaden av strukturen således faller det på ramverket att koda den dynamiska datan.

PHP och JSP

Att jag pekade ut PHP och JSP var inte menat att peka ut .NET som lösningen på allt, långt därifrån. Jag har inte tillräckligt stor koll på .NET för att varken hissa eller dissa det ordentligt – jag har tillräcklig koll på PHP för att säga att PHP har dåligt med inbyggda skydd. Med inbyggda skydd menar jag att det är lättare att göra fel än att göra rätt. Det är lättare att skriva
echo _REQUEST['test']
än att skriva
echo htmlentities(_REQUEST['test'])
Angående vilka miljöer har då "inbyggda skydd" och hög abstraktionsnivå så finns det ett flertal - objektmodeller brukar utvecklas ganska snabbt, problemet är att de inte alltid används - det går snabbare att hacka ihop en sida genom att konkatenera strängar. Webramverket Seaside jobbar med ren objektmodell, men tycker man Smalltalk är för obskyrt :) så finns det för såväl java som .NET ramverk för att hantera html med en objektmodell istället för strängkonkatenering.

Leave a Reply