11. november 2001 - 01:38Der 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?
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\"))
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.
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
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.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.