11. november 2001 - 01:38
Der er
3 kommentarer og
1 løsning
Formatering af brugerinput i textarea
Hvis brugerinput fra en textarea lagres i en database og senere fiskes frem ingen for at blive vist på en asp-genereret html-side, er det som bekendt en god idé at html-encode indholdet for at undgå svinestreger som <script>...</script> eller <body bgcolor=black>. Men sommetider er det ønskværdigt at brugerne får mulighed for at angive simple formateringskoder (lister, tabeller etc.) i deres input i textarea. Hvordan kan man gøre dette uden at tilsidesætte sikkerheden og uden at brugerne kan ændre sidens tænkte design?
11. november 2001 - 01:41
#1
Du skriver bare Response.Write(Server.HTMLEncode(Rs(\"Tekst\")))
Eller endnu bedre, når du får teksten og skal til at indsætte i din db, Så henter du vel teksten med noget i stil med Request.Form(\"Text\"), det laver du bare om til Server.HTMLEncode(Request.Form(\"Text\"))
:)
11. november 2001 - 02:35
#2
Tak for svaret, men det løser ikke mit problem. Med server.htmlencode(rs(\"tekst\")) disables brugerens formateringskoder, men jeg ønsker netop at brugeren skal kunne formatere sit indlæg, dog kun med et begrænset udvalg af formateringskoder.
11. november 2001 - 02:46
#3
Her er en function som fjerner HTML-koder fra tekst. De koder du ønsker skal bevares i teksten fjerner du bare fra tag-listern: Const TAGLIST
Function RemoveHTML( strText )
Const TAGLIST = \";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;IMG;INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;LISTING;MAP;MARQUEE;MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;\"
Const BLOCKTAGLIST = \";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;\"
Dim nPos1
Dim nPos2
Dim nPos3
Dim strResult
Dim strTagName
Dim bRemove
Dim bSearchForBlock
nPos1 = InStr(strText, \"<\")
Do While nPos1 > 0
nPos2 = InStr(nPos1 + 1, strText, \">\")
If nPos2 > 0 Then
strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
strTagName = Replace(Replace(strTagName, vbCr, \" \"), vbLf, \" \")
nPos3 = InStr(strTagName, \" \")
If nPos3 > 0 Then
strTagName = Left(strTagName, nPos3 - 1)
End If
If Left(strTagName, 1) = \"/\" Then
strTagName = Mid(strTagName, 2)
bSearchForBlock = False
Else
bSearchForBlock = True
End If
If InStr(1, TAGLIST, \";\" & strTagName & \";\", vbTextCompare) > 0 Then
bRemove = True
If bSearchForBlock Then
If InStr(1, BLOCKTAGLIST, \";\" & strTagName & \";\", vbTextCompare) > 0 Then
nPos2 = Len(strText)
nPos3 = InStr(nPos1 + 1, strText, \"</\" & strTagName, vbTextCompare)
If nPos3 > 0 Then
nPos3 = InStr(nPos3 + 1, strText, \">\")
End If
If nPos3 > 0 Then
nPos2 = nPos3
End If
End If
End If
Else
bRemove = False
End If
If bRemove Then
strResult = strResult & Left(strText, nPos1 - 1)
strText = Mid(strText, nPos2 + 1)
Else
strResult = strResult & Left(strText, nPos1)
strText = Mid(strText, nPos1 + 1)
End If
Else
strResult = strResult & strText
strText = \"\"
End If
nPos1 = InStr(strText, \"<\")
Loop
strResult = strResult & strText
RemoveHTML = strResult
End Function
response.write RemoveHTML(rs(\"tekst\"))
Jeg har brugt den til en gæstebog. Så rs var request.Form. RemoveHTML functionen fjerner HTML-koder som man ikke ønsker men det er faktisk muligt at \"snyde\" functionen, så der er nødvendigt at kalde den flere gange for at se om strengen har ændret sig.
textToDB2 = RemoveHTML(request.form(\"guestComment\"))
runNo = 1
AttackLimit = 5
do
textToDB = textToDB2
textToDB2 = RemoveHTML(textToDB)
runNo = runNo + 1
loop until (textToDB = textToDB2) OR (runNo = AttackLimit)
if runNo = AttackLimit then
\'Gem ikke pga af \"forsøg\" på at ødelægge...
else
\'Gem i databasen
\"insert into tabel (tekst) values (\'\"&textToDB&\"\')\"
end if
14. november 2001 - 16:19
#4
Tak for dit svar som jeg accepterer. Jeg skal nok lige have rettet din RemoveHtml til så den passer bedre til mit formål, men der er absolut gode idéer at hente i scriptet.