Capture de l'injection SQL et d'autres requêtes Web malveillantes

Je recherche un outil capable de détecter des requêtes malveillantes (telles que des injections SQL évidentes ou des publications) et qui bannira immédiatement l'adresse IP du demandeur/l'ajoutera à une liste noire. Je suis conscient que dans un monde idéal, notre code devrait être capable de gérer de telles demandes et de les traiter en conséquence, mais il y a beaucoup de valeur dans un tel outil même lorsque le site est à l'abri de ce type d'attaques, car cela peut conduire à économiser de la bande passante, éviter le gonflement des analyses, etc.

Idéalement, je recherche une solution multiplateforme (LAMP/.NET) qui se situe à un niveau supérieur à la pile technologique ; peut-être au niveau du serveur Web ou du matériel. Je ne sais pas si cela existe, cependant.

Quoi qu'il en soit, j'aimerais entendre les commentaires de la communauté afin de voir quelles pourraient être mes options en ce qui concerne la mise en œuvre et l'approche.

请先 登录 后评论

5 réponses

Mat

Le problème avec un outil générique est qu'il est très difficile de trouver un ensemble de règles qui ne correspondent qu'à une véritable attaque.

Les mots clés SQL sont tous des mots anglais, et n'oubliez pas que la chaîne

 DROP TABLE users;

est parfaitement valide dans un champ de formulaire qui, par exemple, contient une réponse à une question de programmation.

La seule option sensée est de nettoyer l'entrée avant de la transmettre à votre base de données, mais de la transmettre néanmoins. Sinon, de nombreux utilisateurs parfaitement normaux et non malveillants seront bannis de votre site.

请先 登录 后评论
ricree

Une méthode qui pourrait fonctionner dans certains cas serait de prendre la chaîne sql qui s'exécuterait si vous utilisiez naïvement les données du formulaire et de la transmettre à un code qui compte le nombre d'instructions qui seraient réellement exécutées. S'il est supérieur au nombre attendu, il y a de bonnes chances qu'une injection ait été tentée, en particulier pour les champs qui sont peu susceptibles d'inclure des caractères de contrôle tels que le nom d'utilisateur.

Quelque chose comme une zone de texte normale serait un peu plus difficile car cette méthode serait beaucoup plus susceptible de renvoyer des faux positifs, mais ce serait au moins un début.

请先 登录 后评论
Michael Stum

Une petite chose à garder à l'esprit : dans certains pays (c'est-à-dire la plupart de l'Europe), les gens n'ont pas d'adresses IP statiques, donc la liste noire ne devrait pas être éternelle.

请先 登录 后评论
ricree

Maintenant que j'y pense, un filtre bayésien similaire à ceux utilisés pour bloquer le spam pourrait également fonctionner correctement. Si vous réunissez un ensemble de texte normal pour chaque champ et un ensemble d'injections sql, vous pourrez peut-être l'entraîner à signaler les attaques par injection.

请先 登录 后评论
user7428

L'un de mes sites a récemment été piraté par injection SQL. Il a ajouté un lien vers un virus pour chaque champ de texte dans la base de données ! Le correctif consistait à ajouter du code à la recherche de mots-clés SQL. Heureusement, j'ai développé dans ColdFiusion, donc le code se trouve dans mon fichier Application.cfm qui est exécuté au début de chaque page Web

请先 登录 后评论