Avatar billede cermitto Nybegynder
02. april 2006 - 01:42 Der er 7 kommentarer og
1 løsning

Apostrof genererer fejl i MySql

Apostrof genererer fejl i MySql, hvorfor og hvad kan jeg gøre ved det?
Avatar billede pidgeot Nybegynder
02. april 2006 - 01:53 #1
Fejlen opstår fordi ' er det tegn der bruges til at markere start/slut på en tekststreng.

For at fikse problemet, skal du erstatte alle forekomster af ' med \' eller '' inden du bruger teksten i din query. Det burde ikke være nødvendigt at gøre noget specielt når du hiver teksten ud.

Det er i øvrigt en god ide at benytte dette ALLE steder hvor der kan være tekst, da man så er lidt bedre sikret mod SQL injections.
Avatar billede cermitto Nybegynder
02. april 2006 - 09:59 #2
Jeg skal nok bede om et eksembel, på inputet, men der må da også skal gøres noget for at få det korrekte tegn ud igen?

Hvad mener du med SQL injections?
Avatar billede pidgeot Nybegynder
02. april 2006 - 12:20 #3
Det burde ikke være nødvendigt at gøre noget ved outputtet, da den ændring du foretager blot er "escaping" - det er der kun for at fortælle MySQL hvordan det skal læses korrekt.

Den nemmeste måde at finde ud af dette er dog med en test - hvis det ikke bliver hevet korrekt ud, skal du så blot gøre det modsatte inden du viser teksten.

En SQL injection er en måde hvorpå en bruger (uberettiget) kan køre sin egen SQL kode. Lad os sige du har en formular, der bruger følgende SQL til at kontrollere et login:

SELECT id FROM brugere WHERE brugernavn='brugernavn' AND kodeord='kodeord'

Hvis vi nu siger dit brugernavn er admin og dit kodeord er 123456, så vil den så bruge følgende SQL når du logger ind:

SELECT id FROM brugere WHERE brugernavn='admin' AND kodeord='123456'

Men hvad nu hvis jeg kommer forbi og logger ind med dit brugernavn, men med et andet kodeord - såsom whatever' OR '1'='1? Så vil den SQL der bliver brugt pludselig se sådan ud:

SELECT id FROM brugere WHERE brugernavn='admin' AND kodeord='whatever' OR '1'='1'

hvilket vil sige at jeg, hvis du ikke har kontrol over det der foregår, kan logge ind som dig uden at kende dit kodeord.

SQL injections kunne også benyttes til at slette data:

SELECT id FROM brugere WHERE brugernavn='whatever' AND kodeord=''; DROP TABLE brugere; --'

Ved at erstatte alle apostroffer med \' (den mere universelle måde) eller '' (mere MySQL-specifik), ved MySQL at strengen ikke slutter ved den apostrof, og vil derfor ikke melde fejl eller køre SQL den ikke skulle have kørt:

SELECT id FROM brugere WHERE brugernavn='admin' AND kodeord='whatever\' OR \'1\'=\'1'

Ret beset er der flere ting du bør sikre dig imod - http://dk.php.net/manual/en/function.mysql-real-escape-string.php har en liste.
Avatar billede cermitto Nybegynder
03. april 2006 - 08:12 #4
Okay, der er noget jeg skal ha tjekket igennem der, jeg smider lige nogen eks. hvordan jeg har lavet det, så jeg er sikker på at det er korrekt
Avatar billede cermitto Nybegynder
03. april 2006 - 17:57 #5
Ser sådan ud
SELECT bruger FROM data WHERE id = '" & request("id") & "'
Avatar billede pidgeot Nybegynder
04. april 2006 - 12:47 #6
Der bør du så i stedet lave en variabel med indholdet af request("id"), og få lavet en funktion der gør noget i stil med den PHP-funktion jeg linkede til. Denne kører du så den variabel igennem, og benytter resultatet i din query.

Jeg kan ikke ASP, så jeg kan ikke hjælpe dig med at skrive det, men jeg mener der er en replace() kommando du kan bruge til formålet.
Avatar billede cermitto Nybegynder
11. april 2006 - 09:30 #7
Kommer ikke rigtig videre, nogen eksebpel på det?
Avatar billede cermitto Nybegynder
11. april 2006 - 17:25 #8
Lukker
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