Jens Gyldenkærne Clausen wrote in
dk.edb.internet.webdesign.serverside.asp:
> Esben Uth skrev:
>
> > hmm så skriver den bare :
>
> Det er ikke "bare" noget den skriver - det er faktisk en meget
> præcis angivelse af hvad der er galt. Første linje siger:
>
> > Strengkonstanten er uafsluttet
>
>
> Din strengkonstant er variablen strSQL - og det at den er
> uafsluttet betyder at der mangler et anførselstegn i slutningen af
> linjen.
>
> > /test/indsaet.asp, line 15, column 63
>
> På næste linje fortæller den præcis på hvilken linje og ved hvilket
> tegn fejlen er fundet (hvis du har en editor der kan vise disse
> oplysninger når du redigerer en asp-fil er det en stor hjælp).
>
> > strSQL = "INSERT INTO users (brugernavn, password, navn,
> > email,
> > --------------------------------------------------------------^
>
> Herefter får du et print af den linjen der er skyld i problemet -
> oven i købet med en markering af hvor i linjen problemet opstår.
>
> > Ved du hvad der R galt ?
>
> Ja - du har fået delt opbygningen af strSQL over to linjer. Det kan
> asp ikke håndtere. Jakob Møbjerg Nielsen har i sit svar givet
> forklaringen på hvorfor linjerne bliver ombrudt her på usenet - det
> er du bare nødt til at være opmærksom på hvis du kopierer kode fra
> et indlæg.
>
> > mener du at jeg skal lave sådan at man ikke kan skrive det
> > samme 2 gange?
>
> Nej. Jeg mener at du skal sikre at et indtastet enkelt
> anførselstegn (') bliver erstattet med to styks. På den måde bliver
> anførselstegnet læst og lagt ind i dit felt. Hvis du ikke gør det
> vil sqlkaldet normalt fejle - og hvis du er rigtig uheldig kan en
> ondsindet bruger få din database til at gøre ting du absolut ikke
> har interesse i.
>
> Et par eksempler:
>
> For ikke at bruge for meget plads nøjes jeg med at indsætte data i
> ét felt.
>
> Din kode er:
> strSQL = "INSERT INTO users (brugernavn) VALUES ('" & _
> Request.Form("Brugernavn") & "')"
>
> Jeg indtaster nu "Mc'Donald" i feltet brugernavn. Med ovenstående
> kode bliver ser den færdige strSQL sådan ud:
>
> INSERT INTO users (brugernavn) VALUES ('Mc'Donalds')
>
> Parantesen indeholder tre enkelte anførselstegn. De første to
> omkranser værdien 'Mc', mens det sidste står og flagrer alene.
> Access kan ikke afgøre hvad der skal gøres i den situation og vil
> derfor returnere en fejlmeddelelse.
>
> Endnu værre bliver det når min mindre venlige fætter dukker op. Han
> kan se at du registrerer nogle brugerdata, og gætter på at du har
> en tabel kaldet users. Nu skriver han følgende i feltet brugernavn:
>
> "b'); DELETE FROM users; SELECT * FROM users WHERE ('a' = 'a"
>
> Den færdige strSQL bliver herefter:
>
> INSERT INTO users (brugernavn) VALUES ('b'); DELETE FROM users;
> SELECT * FROM users WHERE ('a' = 'a')"
>
> Semikolon angiver en ny ordre til databasen, så ovenstående er i
> virkeligheden tre forskellige kommandoer til databasen:
>
> INSERT INTO users (brugernavn) VALUES ('b');
>
> - der er en forholdsvis uskyldig indsættelsesforespørgsel
>
> DELETE FROM users;
>
> - her slettes alle poster i din brugertabel pludselig
>
> SELECT * FROM users WHERE ('a' = 'a')"
>
> - og til sidst en uskadelig udvælgelsesforespørgsel.
>
>
> Det kræver en god portion held hvis en ondsindet bruger skal få
> "succes" med sådan et stunt - men omvendt er det meget nemt at
> sikre sig mod at det overhovedet kan lade sig gøre. Og selv om man
> aldrig skulle støde på et ondsindet angreb er det bestemt ikke
> usandsynligt at der en dag er en bruger der finder på at bruge
> enkelt anførselstegn i et felt.
>
> --
> Jens Gyldenkærne Clausen
> MF (medlem af FIDUSO -
www.fiduso.dk)
> I ovenstående tekst benyttes nyt komma.
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! =>
http://www.html.dk/tutorials