Avatar billede cult Nybegynder
30. juli 2004 - 18:05 Der er 21 kommentarer og
1 løsning

Fejl ved brug af ' i formular

Hey folkens :)

Jeg har et lille problem jeg håber i kan hjælpe mig med...

Jeg har lavet et nyhedssystem hvor man kan tilføje og redigere nyheder, og det virker egentlig fint, med mindre der bliver skrevet en nyhed med tegnet ' ... Det er selvfølgelig fordi den bliver brugt i ASP koden også, men hvordan kan jeg få den til at se forskel?

Fejlen er:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''Tekst med ' i indholdet'.

/kukcup/editnews.asp, line 17

På forhånd tak!
Avatar billede ldanielsen Nybegynder
30. juli 2004 - 18:08 #1
du skal erstatte én ' med to ' inden du sætter det ind

Eller gøre det med ado
Avatar billede ldanielsen Nybegynder
30. juli 2004 - 18:08 #2
lad mig se koden, så skal jeg vise dig det
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:09 #3
' tegnet skal ALTID erstattes.. enten med dobbelt ('') eller intet..

noget = replace(request.form("FELTNAVN"), "'", "")

eller

noget = replace(request.form("FELTNAVN"), "'", "''")

Hvis det er til login (brugernavn og/eller kodeord), erstat da med intet..
Avatar billede cult Nybegynder
30. juli 2004 - 18:10 #4
strUpdate = "Update News Set Subject='"& strSubj &"', News='"& strNews &"' where NID=" & Request.QueryString("NID")

Conn.Execute(strUpdate)
Avatar billede squashguy Nybegynder
30. juli 2004 - 18:10 #5
surfer, du skriver hver gang, at hvis det er til login, så skal det erstattes med ingenting.. nogen speciel grund til det?
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:10 #6
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:12 #7
hamderpolle> Ja. En database (hvor ' ikke erstattes) kan hackes, bare ved at kende brugernavnet eller kodeordet.

Man logger ind med:

brugernavn: det man kender
kodeord: ' or 1 = 1

Muligvis: ' or 1 = 1 or '' = '

Man behøver muligvis heller ikke at kende noget som helst (dvs, hverker brugernavn eller kodeord).

Metoden hedder "SQL Injection". Slå det op på www.google.com
Avatar billede squashguy Nybegynder
30. juli 2004 - 18:13 #8
jaja, det er jeg med på. men du skriver, ved login så erstat med ingenting (i stedet for to stks)
Avatar billede cult Nybegynder
30. juli 2004 - 18:16 #9
thesurfer, det virker jo perfekt, smid et svar så du kan få points :)
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:16 #10
Det er sjældent at man ser, et brugernavn der indeholder ' tegnet..
Jeg ville normalt kun tillade "almindelig" tegn.. som f.eks.:
a-z
A-Z
0-0
-
_

Det kan diskuteres, om "æ,ø,å" og "Æ,Ø,Å" skal tillades.
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:16 #11
Der skulle ha' stået "0-9" i stedet for "0-0", som betyder tallene fra 0 og til og med 9.
Avatar billede squashguy Nybegynder
30. juli 2004 - 18:17 #12
surfer>okay, men det ville jeg så bare kontrollere ved oprettelse af brugeren

cult>håber ikke du bliver sur over jeg spammer dit spørgsmål :)
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:19 #13
Det vitale er ved login, og ikke oprettelse.
Det kan være at ' tillades.. så skal man erstatte 1x' med 2x'..
Avatar billede cult Nybegynder
30. juli 2004 - 18:23 #14
hamderpolle, gør ikke noget, vi er her alle for at få svar :)

thesurfer, vil du have points, så skal du smide et svar :)
Avatar billede squashguy Nybegynder
30. juli 2004 - 18:23 #15
Min pointe var egentlig bare, at holde det ensformigt. I stedet for at benytte flere metoder til at beskytte mod injektion, så universalt bruge Replace(var, "'", "''")

Ved oprettelse af bruger, vil man så kontrollere navnet. Lidt surt at oprette sig som "polle's verden" med password "far's dyt", hvis det ikke kan bruges til at logge ind med.. (og password må da gerne indeholde ')
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:26 #16
Når jeg ikke tillader ' tegnet, validerer jeg selvfølgelig inputtet fra brugeren :-)
Jeg gemmer aldrig data direkte i databasen, uden at vide hvad det er :-)
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:28 #17
Og ja, man kunne bare bruge 1x' -> 2x'. Min validering ville give en fejlmeddelelse, ved brug af ' tegnet.

Et godt site, oplyser hvad der er tilladt, eller hvad der ikke er tilladt.
Avatar billede squashguy Nybegynder
30. juli 2004 - 18:39 #18
Vi er da også enige det meste af vejen.

Det der med ensformighed. Når jeg koder, laver jeg specielle funktioner til at håndtere alt input fra brugeren.

Hvis jeg skulle bruge din metode, skulle jeg kode en ekstra funktion specielt til login. Det var blot det jeg studsede over. Hvis du alligevel har kontrolleret input ved oprettelse, sker der jo ikke noget ved at bruge 1x > 2x metoden ved login også.
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:43 #19
ldanielsen skrev jo også et rigtigt svar, så jeg deler med ham/hende..

ldanielsen> Læg et svar: http://www.eksperten.dk/spm/524835
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:46 #20
"ekstra funktion til login"? Nej, egentligt ikke. For vis jeg brugte 1x' -> 0x', ville jeg jo også være sikret..

Altså: 0x' til både oprettelse og login.. på den måde, valideres de på samme måde, og man kan bruge samme kode.
Avatar billede squashguy Nybegynder
30. juli 2004 - 18:47 #21
jo, men jeg snakker også om andet end login :)

F.eks. i cult's tilfælde ved en nyhed, så ville input ryge en tur igennem min sqlsafe() funktion
Avatar billede thesurfer Nybegynder
30. juli 2004 - 18:48 #22
Ahh.. på den måde :-)
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