Avatar billede starf Nybegynder
10. juli 2006 - 13:47 Der er 12 kommentarer og
1 løsning

fejl ved ' samt hindre html input

Hej

forsøger at lave en lille gæstebog men får fejl når et indlæg indeholder ' hvordan kommer man omkring dette?

samt forhindre at folk poster html kode og javakode der bliver kørt når indlæg vises?

min indlægs kode ser pt således ud:

Set rs = Server.CreateObject("ADODB.RecordSet")
Set oConn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/db/fipsGbook.mdb")
oConn.Open strDSN
strSQL = "UPDATE gb SET Name = '" & Request.Form("navn") & "' , Email = '" & Request.Form("email") & "' , Homepage = '" & Request.Form("homepage") & "' , Entry = '" & Request.Form("entry") & "' , Kommentar = '" & Request.Form("Kommentar") & "' WHERE id = " & Request.QueryString("ID")
response.Write(strSQL)




response.Write(strSQL)
oConn.Execute(strSQL)
Avatar billede fennec Nybegynder
10. juli 2006 - 13:54 #1
Udskift med 2 '

function DBText(fText)
  DBText = replace(fText&"","'","''")
end function

strSQL = "UPDATE gb SET Name = '" & DBText(Request.Form("navn")) & "'...
Avatar billede starf Nybegynder
10. juli 2006 - 14:06 #2
yes det ser ud til at virke har bare smidt den DBText funktion på alle sammen.

Hva så med html problemet?
Avatar billede keysersoze Ekspert
10. juli 2006 - 14:21 #3
fx ved at benytte server.htmlencode;

Response.Write Server.HtmlEncode(DINVAR)
Avatar billede fennec Nybegynder
10. juli 2006 - 14:22 #4
... Ellers skal du have fat i en HTML stripper, som fjerner alle HTML tags fra teksten. Der er et par stykker har på E, og jeg kan nok godt finde en til dig, hvis du fortrækker denne løsning i stedet for HTMLEncode...
Avatar billede starf Nybegynder
10. juli 2006 - 14:24 #5
Hvad er lettest?
Avatar billede fennec Nybegynder
10. juli 2006 - 14:26 #6
Fandt denne stripper (har ikke afprøvet den)

Function ReplaceTest(tekst)
  Dim regEx
  Set regEx = New RegExp
  regEx.Pattern = "(<[^><]*>)"
  regEx.global = true
  regEx.IgnoreCase = True
  ReplaceTest = regEx.Replace(tekst, "")
End Function
Avatar billede fennec Nybegynder
10. juli 2006 - 14:33 #7
Det er RegExp, så du skal ikke tage dig af, at det ser mærkelig ud :o)

Løsningerne er lige lette, så det kommer mere an på hvad du vil give brugerne tilladelse til. Er der f.eks nogle tags, der skal være tilladt (f.eks <a>)

Og så er jeg desuden af den mening, at man skal ændre så lidt som mulig på data, som brugeren skriver (HTMLEncode løsningen). Men man kan nemt komme til at glemme den på en udskrift, også kan ens system blive lagt ned.

Alt i alt kan jeg ikke anbefale den ene løsning frem for den anden, da de begge har fordele og ulemper.
Avatar billede starf Nybegynder
10. juli 2006 - 14:35 #8
nej brugeren skal ik ha mulighed for at skrive <i> <b> osv osv...

så prøver bare lige den der reg xp skal lige se om jeg kan få den til at virke
Avatar billede starf Nybegynder
10. juli 2006 - 14:39 #9
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'regEx'

/post_process_form.asp, line 53


er hva jeg får? min kode hvor jeg bruger den ser således ud:

If blnCAPTCHAcodeCorrect Then
   
    Response.Write("Correctly")
   
Const adOpenKeyset = 1
Const adLockOptimistic = 3 

Function ReplaceTest(tekst)
  Dim regEx
  Set regEx = New RegExp
  regEx.Pattern = "(<[^><]*>)"
  regEx.global = true
  regEx.IgnoreCase = True
  ReplaceTest = regEx.Replace(tekst, "")
End Function

Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "Select * From gb"
rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
rs.AddNew

if Request.Form("Name") <> "" then
rs("Name") = regEx(Request.Form("Name"))
end if
if Request.Form("Email") <> "" then
rs("Email") = Request.Form("Email")
end if
if Request.Form("Homepage") <> "" then
rs("Homepage") = regEx(Request.Form("Homepage"))
else
rs("Homepage") = "X"
end if
if Request.Form("Entry") <> "" then
rs("Entry") = regEx(Request.Form("Entry"))
end if
rs("Date") = date()
rs("Kommentar") = "X"
rs("ip") = Request.ServerVariables("REMOTE_ADDR")
rs.Update
rs.Close
Set rs = Nothing
Conn.Close
set Conn = Nothing


Else

    Response.Write("Incorrectly")
End If
Avatar billede fennec Nybegynder
10. juli 2006 - 14:47 #10
Kunne være et NULL problem. Ret den til dette:

ReplaceTest = regEx.Replace(tekst&"", "")
Avatar billede starf Nybegynder
10. juli 2006 - 14:50 #11
får stadig:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'regEx'

/post_process_form.asp, line 53

linie 53 er

rs("Name") = regEx(Request.Form("Name"))
Avatar billede fennec Nybegynder
10. juli 2006 - 15:02 #12
Doh...
Du kalder ikke funktionen. Det skal være ReplaceTest i stedet for regEx:

rs("Name") = ReplaceTest(Request.Form("Name"))
Avatar billede starf Nybegynder
10. juli 2006 - 15:57 #13
tak det virker vist nu :D

DOH
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester