Ik heb nu het één en ander gelezen over escapen, maar er ontgaat me toch nog iets.
In PHP staat magic_quotes_gpc standaard aan als ik het goed begrepen heb. Ik heb inmiddels besloten om deze maar standaard uit te zetten, omdat ik bepaal wat er wel en niet ge-escaped moet worden, en niet m'n server.
Echter, nu zijn er een aantal mogelijkheden over om bepaalde tekens te escapen. Eén daarvan is addslashes(), en de ander is mysql_real_escape_string().
Wat is nu eigenlijk het verschil tussen die twee ?
En verder, ik geloof dat backquotes (`) nooit ge-escaped worden. Is dat niet een kwalijke zaak ? Volgens mij is er dan zeker nog een risico wbt. SQL injection voor de mensen die standaard backquotes gebruiken (en dat zijn er nogal wat).
Dan zitten we nog met integers, het liefst ga je die natuurlijk niet tussen quotes zetten, het zijn immers integers. Maar stel je hebt iets als dit;
Dan kan nogsteeds het volgende aangeroepen worden;
Bij wijze van spreken. Bij mij krijg ik er alsnog een SQL syntax error op, maar dat even terzijde. Normaal gesproken werkt dit gewoon lijkt me.
Kom je er dan toch uiteindelijk op uit dat je integers tussen enkele quotes of backquotes moet gaan plaatsen ?
In PHP staat magic_quotes_gpc standaard aan als ik het goed begrepen heb. Ik heb inmiddels besloten om deze maar standaard uit te zetten, omdat ik bepaal wat er wel en niet ge-escaped moet worden, en niet m'n server.
Echter, nu zijn er een aantal mogelijkheden over om bepaalde tekens te escapen. Eén daarvan is addslashes(), en de ander is mysql_real_escape_string().
Wat is nu eigenlijk het verschil tussen die twee ?
En verder, ik geloof dat backquotes (`) nooit ge-escaped worden. Is dat niet een kwalijke zaak ? Volgens mij is er dan zeker nog een risico wbt. SQL injection voor de mensen die standaard backquotes gebruiken (en dat zijn er nogal wat).
Dan zitten we nog met integers, het liefst ga je die natuurlijk niet tussen quotes zetten, het zijn immers integers. Maar stel je hebt iets als dit;
PHP:
1
| <?php mysql_query("SELECT COUNT(*) FROM tabel WHERE prijs = ".$_GET['id']." ORDER BY prijs DESC"); ?> |
Dan kan nogsteeds het volgende aangeroepen worden;
code:
1
| http://www.example.com/index.php?id=1 OR 1 = 1; DROP TABLE tabel; SELECT * FROM tabel |
Bij wijze van spreken. Bij mij krijg ik er alsnog een SQL syntax error op, maar dat even terzijde. Normaal gesproken werkt dit gewoon lijkt me.
Kom je er dan toch uiteindelijk op uit dat je integers tussen enkele quotes of backquotes moet gaan plaatsen ?