webForumDet fria alternativet

när ska man ta bort dumma tecken?

ASP

10 svar · 410 visningar · startad av Calevan

Medlem sedan maj 20031 173 inlägg
Frågan#1

Hej!

Har tidigare fått tips om att innan man skriver ut text, så kör man den genom ett filter som tar bort dumma tecken. Men bara så jag inte gör något dumt nu, men det är väll mycket bättre att göra kollen innan man skriver in i databasen och sen inte något mer?

eller, gör man något annat?

tack!

Medlem sedan mars 20007 896 inlägg
#2

Tecken som kan användas vid SQL-injections, osv., som kan förstöra för dig ska tas bort innan informationen lagras i databasen. Formatering av informationen sköter du när du hämtar den.

Medlem sedan maj 20031 173 inlägg
#3

SPiN skrev:

Tecken som kan användas vid SQL-injections, osv., som kan förstöra för dig ska tas bort innan informationen lagras i databasen. Formatering av informationen sköter du när du hämtar den.

är det inte smidigt att ta allt på en gång?

jag kör det genom detta filter nu:

<%
Function FixaTecken(sfix)

	on Error resume next
	sfix = Replace(sfix, "<", "&lt;")
	sfix = Replace(sfix, ">", "&gt;")
	sfix = Replace(sfix, chr(13), "")
	sfix = Replace(sfix, chr(10) & chr(10), "<br> <br>")
	sfix = Replace(sfix, chr(10), "<br>")
	sfix = Replace(Trim(sfix), "'", "''")
	sfix = Replace(sfix, "|", "")	

	FixaTecken= sfix
	
End Function
%>

och så gör jag den innan det lagras i databasen från och med nu. det borde väll räcka eller?

Medlem sedan mars 20007 896 inlägg
#4

är det inte smidigt att ta allt på en gång?

Nej, för tänk om du vid ett senare tillfälle vill ändra på formateringen? Mycket krångel blir det...

det borde väll räcka eller?

Ja, det räcker. Men jag skulle bara ha kvar de två sista raderna i filtret för att förhindra injections.

Medlem sedan aug. 20012 349 inlägg
#5

tänk om du bara tillåter användaren att skriva in ett visst antal tecken, och att bara samma mängd tecken går in i databasen. När du gör om texten innan du sätter in den så blir det ju ofta längre, och passar därmed inte. Felkälla.
Bättre att göra htmlencode när man skriver ut istället.

Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Dessa ska du ju inte köra replace på, de ska du ju formatera när du visar texten. <br> är ju faktiskt lite längre än ett vbcrlf i db'n (4-1=3 tkn)!

sfix = Replace(sfix, chr(13), "")
sfix = Replace(sfix, chr(10) & chr(10), "<br> <br>")
sfix = Replace(sfix, chr(10), "<br>")
Medlem sedan nov. 200364 inlägg
#7

skriv: Server.HTMLencode(RecSet("enkulumnsomduvillskrivaututanhtmlasp"))

Medlem sedan maj 20031 173 inlägg
#8

Jag märkte något jag inte förstår. När jag inte hade någon kontroll av koden som skulle in i databasen så gick det inte så bra att skriva med '-tecknet. Om jag lät koden passera genom filtret ovan så går det ju givetvis att skriva med de tecknet eftersom jag har denna raden:

sfix = Replace(Trim(sfix), "'", "''")

MEN när posten visas så står det ett '-tecken, det verkar altså som det tecknet inte har replacats, fast det sabbar ingenting utan det fungerar precis som om '-tecknet inte lägre var farligt. Varför är det så?

Medlem sedan mars 20007 896 inlägg
#9

Du escape:ar tecknet, heter det. I t.ex. C-dialekter används \ för escape:ing. I Basic-dialekter använder man dubbel förekomst av tecken.

Medlem sedan maj 20031 173 inlägg
#10

SPiN skrev:

Du escape:ar tecknet, heter det. I t.ex. C-dialekter används \ för escape:ing. I Basic-dialekter använder man dubbel förekomst av tecken.

ah! tack, så är det ja. nu när du säger det så minns jag det.

tack!

Medlem sedan maj 20031 173 inlägg
#11

många svar här jag skulle vilja sätta Acceptera som slutgiltigt svar
på... men det får bli den senaste tror jag :)

277 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
152 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)