Kan dette sql injectes?

Tags:    pdo mysql sql

<< < 12 > >>
Overskriften siger vel sig selv.
Fold kodeboks ind/udPHP kode 


Grunden til jeg er i tvivl er at jeg sagtens kan lave en PHP error.
"Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation"

Ved at skrive dette i urlen:
Fold kodeboks ind/udKode 




11 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 33 karma
Sorter efter stemmer Sorter efter dato

Fold kodeboks ind/udSQL kode 





Fordelen med prepared statements, er at hans sql bliver fortolket som:
Fold kodeboks ind/udSQL kode 

For at bryde igennem skal man skrive noget i stil med

Fold kodeboks ind/udSQL kode 


Hvilket vil svare til:
Fold kodeboks ind/udSQL kode 


PDO og MYSQLI er ikke det samme.

Edit: For at holde os til sagen. Den del af din kode du viser, er ikke sårbar overfor injection.



Indlæg senest redigeret d. 13.03.2013 20:02 af Bruger #955
Det er jo netop det. Du skal ikke have plinger rundt om et id. Derfor vil den tage resten som en streng. Men du kan jo aldrig sige

Fold kodeboks ind/udSQL kode 


For at bryde igennem skal man skrive noget i stil med

Fold kodeboks ind/udSQL kode 


Men er ikke sikker på om parameter-delen i mysqli sikre imod det. Det tror jeg faktisk at det gør. Så prøv at slå selve parameter-delen op på Google omkring SQL Injection.

Google søgning



Stored procedures vil sikre dig mod SQLi fordi du beskriver hvad der skal indtastes.

Se http://puu.sh/2rcgl

Og derfor hvis der indtastes andet end INT som ID eller overskrider 11 karakterer vil funktionen fejle.

Med venlig hilsen
Patrick Nærvig Wøhlk



Stored procedures beskytter ikke i sig selv imod SQLi:

http://blogs.msdn.com/b/brian_swan/archive/2011/02/16/do-stored-procedures-protect-against-sql-injection.aspx
http://www.infosecisland.com/blogview/13988-SQL-Injections-In-Stored-Procedures.html

Hvis man gør det rigtigt, så kan de skrives sikkert...det samme gælder prepared statements og hjemmebryggede SQL strenge. Gør man det rigtigt er alt sikkert imod SQLi, gør man det forkert er det muligvis usikkert.




du får en syntaks error, så umiddelbart sker der ikke noget.



Hmm...

Men burde den ikke søge efter et id der har id'et
" 49')%20DROP%20table%20TEST') " ?

Ellers så forstår jeg ikke prepare->();



Nu har jeg ikke super meget forstand på mysqli, men det skulle være det samme uanset hvad.

Som ^Dan siger, er det en syntax fejl.

Det er fordi at du ikke har plinger rundt om din variabel. Den prøver at skrive

Fold kodeboks ind/udSQL kode 


Og det duer jo ikke. Derfor burde der ikke være mulighed for SQL Injection. Men du bør sikre den variabel den smider ind i sql-strengen. Men det burde allerede være godt sikret når du bruger parameter. Så ikke noget direkte at være bekymret over.



Det skulle jo gerne være det prepare gjorde.

Satte min $id ind i en slags container.



@Stefan, tak for svaret svaret.



Du kan også sikre det på en anden måde ved at lave "stored procedures".



<< < 12 > >>
t