Protection contre les attaques "SQL injection"

  • Auteur de la discussion Auteur de la discussion aladdin
  • Date de début Date de début
WRInaute passionné
j'ai décidé d'installer un phpBB sur un site et je me suis rappellé que ce genre de forum subit pas mal d'attaques de type SQL injection
ce qui est pas marrant c'est de devoir toujours suivre les news de sécurité pour corriger les failles éventuelles

je me suis donc décider de creer un script qui protège de ce genre d'attaque une fois pour toute

il y a deux methode

avec l'url rewriting
Code:
RewriteRule .*(<|>|;|UNION|ALL|SELECT|WHERE).* /trackattak.php [QSA,NC,L]

et pour ceux qui ne peuvent pas utiliser l'url rewriting, ajouter ce code tout au debut de la page
Code:
if ( eregi("(<|>|;|UNION|ALL|SELECT|WHERE)", $QUERY_STRING))  
{
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: trackattak.php"); 
exit(); 
}
ce code modifie les entete vous devez donc le placcer tout au début de votre script avant l'envoi des donnée

ensuite dans le script trackattak.php vous pouvez par exemple enregistrer l'IP de l'attaquant, le navigateur utilisé ....etc ;)

---
edit : petite erreur dans le script php corrigé ;)
 
WRInaute impliqué
Ton script est pas mal, mais il manque le OR et le AND qui sont très souvent utilisés dans les attaques de type SQL injection sur PHPNuke ou PHPBB.
 
WRInaute passionné
oui je sais, c'etait juste pour donner un exemple

sinon generalement c'est le UNION qui est plus utiliser pour executer une autre requete, le And et le OR permettent de voir de résultats en plus ce qui est pas vraiment génnant
 
WRInaute impliqué
aladdin a dit:
oui je sais, c'etait juste pour donner un exemple

sinon generalement c'est le UNION qui est plus utiliser pour executer une autre requete, le And et le OR permettent de voir de résultats en plus ce qui est pas vraiment génnant

Sur Bugtrack, il y a plein d'exmples de SQL Injection sous PHPNuke qui n'utilisent que le AND ou le OR pour avoir des acces privilegiés.

Petit exemple:
Code:
'SELECT * FROM products WHERE id='.$id.' AND userrights<'.$userrights

L'injection:
Code:
'SELECT * FROM products WHERE id='.$id.' AND userrights<'.$userrigths.' OR 1=1'
 
WRInaute passionné
MarvinLeRouge a dit:
De toute façon, utiliser une requète qui provient de l'url, c'est de la folie

bein quand tu utilise phpBB ou autre outils php existant t'a pas trop le choix, sinon tu peut t'amuser à repasser sur tout le code ;)
 
WRInaute passionné
MarvinLeRouge a dit:
Si phpBB fait passer ses requètes par l'url alors je n'utiliserai pas phpBB. C'est aussi simple que ça.

c'est pas phpbb qui passe des requetes dans l'url mais l'utilisateurr malicieux qui fait passer la requete par l'URL et ce genre d'attaque est connue sous le nom de "SQL injection"

la plupart des CMS ont été confrontés un jours (et seront confrontés) à cette vulnérabilité. et à chaque fois il faut des patches pour éviter la faille .
alors que ce script empeche le passage de mots clés SQL dans l'url et donc l'attaque ;)

understand ?
 
Discussions similaires
Haut