2011-01-09 3 views
1

Comment puis-je tester si l'injection SQL ne fonctionne pas dans une zone de texte sur mon site?Comment tester si l'injection SQL est bloquée?

+0

Vous devrez être beaucoup plus précis. Comment échappez-vous au texte avant de l'entrer dans la base de données? – Savetheinternet

+0

Pouvez-vous montrer du code interne? c'est-à-dire comment la zone de texte est utilisée? Il n'y a pas de moyen générique, cela dépend de la requête que vous utilisez –

Répondre

1

Vous devez généralement penser comment les données du champ de saisie atteindront la sélection réelle. Une fois que vous savez que vous essayez de voir quel type de texte pouvez-vous mettre dans ce champ pour terminer une déclaration SQL et en commencer une autre. Par exemple, si vous avez quelque chose comme ça dans le code: 'select * from table where id = ' . $_GET['id'] et que je vous appelle avec script.php?id=0%20OR%20true; drop table table;, je peux exécuter deux instructions.

Mais en général, vous devriez éviter de construire des sélections en les concaténant. Mieux vaut utiliser des paramètres bornés qu'un autre répondant a suggéré.

8

Utilisez un mécanisme qui garantit qu'il est impossible de concevoir, comme les paramètres liés. Ensuite, aucun test (pour la résistance à l'injection SQL) n'est nécessaire. En d'autres termes, ne vous fiez pas au code d'échappement ad-hoc; il est très probable que vous n'obtiendrez pas 100% correct.

+1

Alors, comment testez-vous si vous avez réussi à le faire dans une application non triviale? –

+0

@Jens: À mon humble avis, ce genre de chose est très difficile à tester de façon significative. On pourrait choisir de tester en utilisant une liste prédéfinie de chaînes d'attaque "typiques", mais cela ne prouve pas vraiment grand chose. C'est vraiment une question de cohérence de conception au niveau du système. –

+0

Je suis d'accord. Vous ne devriez pas avoir besoin de tester. Sinon tout ce que vous testez est l'ensemble des entrées que vous testez avec – gbn

0

La vérification habituelle consiste simplement à ajouter tous les symboles spéciaux une fois dans le champ et à voir s'il y a une erreur SQL. S'il n'y a pas d'erreur et que l'enregistrement est correctement inséré dans DB - c'est bien.

1

Vous pouvez utiliser cette liste pour créer des attaques contre votre code: http://ha.ckers.org/sqlinjection/

Vous pouvez également assembler une liste de caractères « dangereux » et des combinaisons de caractères et de créer (pseudo) valeurs d'entrée -RANDOM de lui.

Questions connexes