Question

Je souhaite inspecter les instructions SQL dans le code Java / jdbc afin de m'assurer que le code SQL à exécuter est d'une qualité acceptable. Ni PMD, ni Findbugs ne semblent avoir de règles JDBC ou SQL. Je pourrais utiliser p6spy pour consigner le code SQL et voir de cette façon, mais c’est manuel.

Je me demande si la stratégie consistant à utiliser PMD / Findbugs / etc pour créer une règle transmettant à une chaîne toute chaîne transmise à PreparedStatement où il existe un " = " ou & dans; " n'a que des vars paramétrés du côté de la comparaison.

Quelqu'un a-t-il fait cela? Ou cela par d'autres moyens?

Était-ce utile?

La solution

C'est un problème délicat. Des opérateurs de comparaison tels que = et IN() sont quelques cas, mais il y a aussi: != <> < <= > >= LIKE.

Comment repérez-vous les cas d'interpolation de variables d'application en tant que littéraux d'expressions?

String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";

Vous pouvez rechercher des délimiteurs de chaîne contenant du code SQL, mais l'injection SQL ne provient pas uniquement de l'interpolation de littéraux de chaîne.

Comment identifieriez-vous les cas d'interpolation de variables d'application comme des éléments autres que les valeurs de données?

String sql = "SELECT * FROM mytable ORDER BY " + columnname;

Je ne connais aucun moyen automatique de détecter les failles d'injection SQL. La révision du code est un moyen plus efficace de les repérer. Dans chaque instruction SQL contenant des variables d'application interpolées, vous devez confirmer que les variables d'application sont & Quot; safe & Quot; et que votre application les a explicitement validées ou transformées afin qu'elles ne contiennent pas de charge utile dangereuse.

Autres conseils

Avez-vous la possibilité de tester complètement l’application avec un débogueur connecté à celle-ci?

Définissez un point d'arrêt dans l'implémentation de Connection.createStatement () dans votre pilote JDBC et exécutez l'application ... (ou si vous utilisez un pilote pour lequel vous n'avez pas de code source, écrivez un faux pilote qui délègue simplement les appels à le vrai, et enregistre toutes les instances de createStatement ())

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top