MySQL-sikkerhed

Tags:    php

Hej,

Jeg har et for erfarne MySQL-brugere sikkert stupidt spørgsmål.

Når jeg har et query, der fx hedder:

Fold kodeboks ind/udKode 


Er det så ikke muligt at brugeren kan lave noget harmfuldt ved at ændre $id globalt når formen sendes. Fx hvis brugeren i URL'en skrev "www.eksempel.dk/?action=submitform&id=3 ORDER BY nr", så bliver query'et til

Fold kodeboks ind/udKode 


Nu sker der ikke noget slemt ved at rækken sorteres, men brugeren har med succes kunnet ændre query'et. Findes der nogen effekt måde at sikre dette? Er det tilstrækkeligt at skrive '$groupid', altså med gåseøjne omkring? Sidder med følelsen af at det ikke er.



Indlæg senest redigeret d. 29.10.2007 11:13 af Bruger #4769
6 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 9 karma
Sorter efter stemmer Sorter efter dato
PHP har nogle indbyggede sikkerhedsfunktioner (der iblandt magic_quotes_gpc) som gør at det ikke kan lade sig gøre. Denne funktion udgår dog i næste version af PHP (PHP6) og så skal man selv sørge for at sanitize dine queries.



folk gør det på mange forskellige måder,

nogen skriver simpelthen deres sql statements på denne her måde

$query = "SELECT ..... WHERE id='addslashes($id)'";

hvor imod andre gør det at de manuelt laver magic quotes ved at lave en foreach løkke på $_GET og $_POST

Personligs har jeg selv lavet et lille objekt jeg hiver alt bruger input igennem, og på den måde garanterer at intet bruger input der ikke er valideret kommer videre, det sker i form af at objektet melder en fejl hvis du prøver at bruge noget der ikke er valideret



Jeg syn's lige at jeg burde henvise til safeSQL:

http://www.phpinsider.com/php/code/SafeSQL/



PHP har nogle indbyggede sikkerhedsfunktioner (der iblandt magic_quotes_gpc) som gør at det ikke kan lade sig gøre. Denne funktion udgår dog i næste version af PHP (PHP6) og så skal man selv sørge for at sanitize dine queries.


Tak for svaret.

Men det gøres hvordan? - Hvis man selv skal sikre dem?



folk gør det på mange forskellige måder,

nogen skriver simpelthen deres sql statements på denne her måde

$query = "SELECT ..... WHERE id='addslashes($id)'";

hvor imod andre gør det at de manuelt laver magic quotes ved at lave en foreach løkke på $_GET og $_POST

Personligs har jeg selv lavet et lille objekt jeg hiver alt bruger input igennem, og på den måde garanterer at intet bruger input der ikke er valideret kommer videre, det sker i form af at objektet melder en fejl hvis du prøver at bruge noget der ikke er valideret


Tak for svaret. Jeg tror jeg forsøger det med GET/POST. Hvordan skal sådan en foreach-løkke se ud?



Jeg takker for hjælpen.

Det der SafeSQL ser ud til at være det jeg står og mangler, og hvis jeg ikke får det til at fungere kan jeg altid bruge GET/POST-metoden.



t