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?
Répondre
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é.
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.
Alors, comment testez-vous si vous avez réussi à le faire dans une application non triviale? –
@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. –
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
vous suffit d'entrer cette chaîne:
'";
Si aucune Escaping est en action, cela va briser votre SQL pour vous. Pour plus d'informations, voir this site about better Strings et this question.
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.
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.
- 1. Détermine si une application est bloquée/occupée?
- 2. Vérifier si la session d'écriture est bloquée
- 3. Comment puis-je détecter si mon annonce AdSense est bloquée?
- 4. Comment trouver si l'image est bloquée dans les destinataires Outlook
- 5. comment tester l'exception de ligne bloquée dans junit
- 6. générique DAO - Tester si le SQL généré est correct
- 7. Comment tester si UIKeyboardTypeDecimalPad est disponible?
- 8. comment tester si CComBSTR est vide
- 9. Comment tester si la matrice est diagonale?
- 10. Comment tester si un bloc est appelé
- 11. Transaction SQL a été bloquée
- 12. Tester si javascript est activé
- 13. Détecter si l'image est bloquée par un proxy
- 14. SQL Alors que la boucle est bloquée en boucle infinie
- 15. Mon application s'est bloquée si j'utilise dispatch_async
- 16. L'API Microsoft Translator est bloquée
- 17. UITableView, la vue est bloquée?
- 18. Tester si une session Facebook est valide?
- 19. tester si une propriété MSBuild est définie?
- 20. Tester si une classe est polymorphe
- 21. SQL et VB - Comment appliquer une fonction pour tester si la copie est en espagnol
- 22. Comment tester si la base de données SQL Server est en mode mono-utilisateur
- 23. Comment tester si une chaîne est dans une liste de chaînes prédéfinies dans oracle pl/sql
- 24. Comment tester si MethodInfo.ReturnType est le type de System.Void?
- 25. Comment tester si un caractère est numérique, majuscule ou minuscule?
- 26. Comment tester si un JSONObject est nul ou n'existe pas
- 27. Comment tester si un champ de l'éditeur CK est vide
- 28. Comment tester si ma requête LINQ est passé par
- 29. Comment tester si le centre de jeu est disponible?
- 30. comment tester si le formulaire est post ou obtenir?
Vous devrez être beaucoup plus précis. Comment échappez-vous au texte avant de l'entrer dans la base de données? – Savetheinternet
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 –