Ik heb wel vaker gelezen over het gevaar van SQL injection, dus ik ben het maar even wezen testen.
Zowel met GET als met POST, de GET zowel met een form als in de browser adresbalk. Alle 3 de situaties een variabele met naam query de waarde '; delete from table; select * from table where field=' gegeven. Met de gebruikte query (zie onder) zou dit zonder escaping het volgende opleveren:
SELECT * FROM table WHERE field=''; delete from table; select * from table where field=''
Behoorlijk link dus.
Alleen, in alle drie de gevallen worden de $postquery en $getquery variabelen netjes automatisch escaped, zowel onder mijn lokale installatie op het werk (test bak, IIS4 + PHP4.3.10) als bij mijn hosting provider (Apache, PHP 4.3.2). Doe ik hetzelfde in ASP dan is er geen auto escaping en dus wel degelijk groot gevaar.
Is dit gevaar voor PHP inderdaad zo overdreven, of zie ik iets over het hoofd?
Test code:
Zowel met GET als met POST, de GET zowel met een form als in de browser adresbalk. Alle 3 de situaties een variabele met naam query de waarde '; delete from table; select * from table where field=' gegeven. Met de gebruikte query (zie onder) zou dit zonder escaping het volgende opleveren:
SELECT * FROM table WHERE field=''; delete from table; select * from table where field=''
Behoorlijk link dus.
Alleen, in alle drie de gevallen worden de $postquery en $getquery variabelen netjes automatisch escaped, zowel onder mijn lokale installatie op het werk (test bak, IIS4 + PHP4.3.10) als bij mijn hosting provider (Apache, PHP 4.3.2). Doe ik hetzelfde in ASP dan is er geen auto escaping en dus wel degelijk groot gevaar.
Is dit gevaar voor PHP inderdaad zo overdreven, of zie ik iets over het hoofd?
Test code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <html> <body> <form action="" method="post"> <input type="text" name="query"> <input type="submit"> </form> <form action="" method="get"> <input type="text" name="query"> <input type="submit"> </form> <p> <? $postquery = $_POST["query"]; $getquery = $_GET["query"]; $postquery = "SELECT * FROM table WHERE field='$postquery'"; $getquery = "SELECT * FROM table WHERE field='$getquery'"; print "$postquery<br>$getquery"; ?> </p> </body> </html> |
[ Voor 15% gewijzigd door Robtimus op 14-10-2005 21:03 ]
More than meets the eye
There is no I in TEAM... but there is ME
system specs