Protection injection SQL
février6
Le piratage de site web se fait le plus souvent via des injections SQL.
Il existe plusieurs solutions pour se protéger contre ce genre d’attaques.
La première est simple suffit de bien coder ses requêtes et de protéger les variables qu’on intègre.
- Toujours utiliser la fonction : « mysql_real_escape_string » :
$requete="SELECT champ
FROM table
WHERE id='".mysql_real_escape_string($variable)."'";
- Ne pas faire de « SELECT * »
- Si vous chercher uniquement un enregistrement dans une table ajouter à la fin « LIMIT 0,1 »
- Si vous utiliser une variable numérique dans une requête vérifier qu’elle est vraiment numérique, via les différentes fonctions : is_numeric(), is_int(), is_integer(), …
- tronquer les variables, si vous savez que la variable que vous intégrer dans votre requête ne dépasse par exemple jamais 10 caractères : substr($variable,0,10
- On peux aussi utiliser un fichier .htaccess, exemple :
RewriteEngine On
RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
RewriteCond %{QUERY_STRING} ^(.*)(%3C|<)/?script(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)?javascript(%3A|:)(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)document\.location\.href(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)base64_encode(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)GLOBALS(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)_REQUEST(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)(SELECT|INSERT|DELETE|CHAR\(|UPDATE|REPLACE|LIMIT)(.*)$
RewriteRule (.*) - [F]