SÖK:

Avdelningar


Blogroll


Arkiv


Ett bättre HTMLencode för skydd mot cross-site scripting (XSS)

[ 2008-05-13 ] - Avdelningar: Tips & Trix, Egna tjänster, Programmering |

Detta är enbart för folk som gör hemsidor.

Cross site scripting kan vara riktigt otrevligt. Vid interaktion med en hemsida kan mindre snälla besökare skicka in kod som kan göra skada. I VBscript finns server.HTMLencode för att ersätta problematiska tecken med dess motsvarighet i HTML-kod, andra språk har sina motsvarigheter. Tyvärr brukar detta inte vara full tillräckligt. Läs på MicroSoft om server.HTMLencode och vilka tecken som ersätts.

Vad händer om man vill vara säkrare eller om man vill ha alternativ på vad som ersätts?

HTMLencode med alternativ

Jag använder följande:

‘//////////////////////////////////////////////////////////////
‘///
‘/// This script was created by Marcin Nowak and published at http://mnowak.se
‘/// Feel free to use this script as long as you include this disclaimer.
‘/// A link to http://mnowak.se is appriciated.
‘///
‘//////////////////////////////////////////////////////////////
function getHTMLencode(str,char)
   dim temp, i
   temp=”"
   if len(str)=0 then
      str=”"
   else
      if char=”all” then
         for i=1 to len(str)
            temp=temp&”&#”&ascw(mid(str,i,1))&”;”
         next
         str=temp
      elseif char=”nonletters” then
         for i=1 to len(str)
            if not instr(”abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”,mid(str,i,1))>0 then
               temp=temp&”&#”&ascw(mid(str,i,1))&”;”
            else
               temp=temp&mid(str,i,1)
            end if
         next
         str=temp
      elseif len(char)>0 then
         for i=1 to len(str)
            if instr(char,mid(str,i,1))>0 then
               temp=temp&”&#”&ascw(mid(str,i,1))&”;”
            else
               temp=temp&mid(str,i,1)
            end if
         next
         str=temp
      else
         str=server.HTMLEncode(str)
      end if
   end if
   temp=empty
   getHTMLencode=str
end function

str är strängen som ska utvärderas, char är ersättningsalternativ

char kan ha följande värden:
all - ersätter alla tecken med html-kod, perfekt för den paranoide/nogranne.
nonletters - ersätter alla tecken förutom engelska bokstäver
valfria tecken - du anger själv vilka tecken som ska ersättas. Ex: “abc” skulle ersätta endast bokstäverna a, b och c med HTML-kod.
“” - anger du bara en tom sträng så kör den traditionella server.HTMLencode.

Fungerar i UTF-8

Notera att denna funktion fungerar i UTF-8 tack vare ascW.

Som nämnt i skriptet, om du vill använda det så är en länk uppskattad.

Kommentera