Avatar billede danielhep Nybegynder
26. juni 2011 - 14:02 Der er 6 kommentarer og
1 løsning

Sikker sql forspørgsel via URL

Jeg har brug for at være helt sikker på hvad jeg skal sige til et par stykker jeg underviser.

Det handler om SQL injection.  Stort set har jeg det meste på plads, men der er en lille en som jeg ikke helt kan få til at virke.

Klassisk PHP eks:
-----------------
mysql_query("SELECT * FROM users WHERE id=".$_GET["id"]);

Dette er ikke godt..

Har forsøgt div. via URL linien, og kan ikke få slettet min test tabel "secret".

Har haft success med at udføre multible SQL sætninger via PHPMyAdmin, men det vil ikke virke via URL.  Jeg har godt klar over at jeg mengler noget, men her er et eks..

http://localhost/sqlInc/index.php?id=1;DROP TABLE secret;

Min mål er at slette min test tabel "secret" fra min database.  Håber nogle lige kan se hvad jeg mangler.
Avatar billede majbom Novice
26. juni 2011 - 15:12 #1
har du søgt på sql-injections?
Avatar billede danielhep Nybegynder
26. juni 2011 - 16:23 #2
ja, det har jeg da.  Men kan ikke få det til at virke.
Avatar billede webweaver Praktikant
27. juni 2011 - 12:25 #3
Hvad er dit problem egentlig?

Ønsker du at forsøge at lave et injection eller ønsker du bare at slette noget i din database med en værdi fra en URL?

Kan ikke rigtig se problematikken i det sidstnævnte nemlig.
Du ønsker, at det skal være sikkert. Så kan du lave det med prepared statements?

Noget ala dette burde kunne gøre det:
<?php

$mysqli = new mysqli(host", "user", "pass", "database");

if ($stmt = $mysqli->prepare("DELETE from secret WHERE id = ?")) {

$stmt->bind_param('i', $_GET["id"]);                               
$stmt->execute();
                               
$stmt->close();

} else {

printf("Der opstod en fejl. Prøv igen senere. %s\n", $mysqli->error);

}

?>
Avatar billede danielhep Nybegynder
28. juni 2011 - 06:21 #4
Hej Lasse Jensen,


Mit mål er at slette den tabel som hedder "secret" i min database.  Som jeg også har beskrevet.  De eksempler jeg har skrevet allerede virker ikke, og jeg har prøvet rigtig mange forskellige derefter.

Kan du se hvad det er jeg mangler?
Avatar billede webweaver Praktikant
28. juni 2011 - 11:34 #5
Hvis det er dette SQL statement du prøver at arbejde dig ind på,

mysql_query("SELECT * FROM users WHERE id=".$_GET["id"]);

så mangler der lidt på det. Det vil sige et anførselstegn, der skal flyttes.

mysql_query("SELECT * FROM users WHERE id = '$_GET["id"]'");

Har du prøvet at udskrive din query som tekst imens du tester?
Så kan du nemt se, om syntaksen er korrekt, når du tilføjer variablen i adressen en værdi?

echo 'mysql_query("SELECT * FROM users WHERE id=' . $_GET["id"] . '");';

Jeg kan ikke rigtig hjælpe dig med SQL injections som sådan, men jeg ved, at hvis jeg forsøger at smide en drop table ind i variablen, så får jeg en 403 med det samme.
Avatar billede danielhep Nybegynder
28. juni 2011 - 15:13 #6
Ja det er helt korrekt, jeg får det samme resultat :)

Drop table er det eneste jeg ikke rigtigt kan få til at fungere.

Injection select sætninger hvor man tvinger sig til tabel info, er jeg helt med på, men der er bare noget underligt med det drop table.

Måske at jeg skal se på det fra en anden vinkel.



Ja, jeg har prøvet at udskrive min query som tekst.  Hvis jeg indsætter den med PHPmyAdmin i SQL vinduet, så virker det, men ikke igennem PHP.
Avatar billede danielhep Nybegynder
06. juli 2011 - 17:39 #7
Jeg kom ikke videre herfra, og har besluttet a lukke mit spørgsmål.

Tak for jeres kommentare, jeg kom ikke rigtigt videre herfra.  Opretter måske et nyt spørgsmål, senere på måneden, men mere tekst og forklaring.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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