2011-06-23 5 views
0

J'ai une question et j'espère que vous y répondez s'il vous plaît.Spring framework avec JDBC standard en Java

Je veux utiliser framework Spring avec jdbc standard comme celui-ci

"SELECT usernmae FROM users WHERE username='" + usename + '" 

Est-il possible de le faire que je veux utiliser DONOT préparée. C'est juste une requête d'échantillon. JDBC n'est pas plus ou moins vulnérable à l'injection SQL que tout autre mécanisme de connexion SQL.

+6

Standard JDBC n'est pas vulnérable à l'injection SQL. La mauvaise programmation est. Le printemps ne fera aucune différence de toute façon. Aussi, 'JdbcTemplate' * est * JDBC standard, juste avec une interface légèrement plus agréable. – skaffman

+0

J'ai projet et je veux montrer que l'utilisation de JDBC avec Spring pourrait conduire à l'injection sql. Il est possible de faire cela avec le printemps et le standard jdbc (je veux dire sans utiliser l'état préparé, c'est l'échantillon jdbc) avec le ressort. – user813056

+0

S'il vous plaît ne posez pas la même question à plusieurs reprises. Cette question est seulement deux heures et vieux demandant la même chose une heure plus tard n'est pas considéré comme acceptable. Si vous avez quelque chose à ajouter, ajoutez à cette question. Merci. – Kev

Répondre

1

La vulnérabilité à l'injection SQL tombe entre les mains des personnes qui écrivent le code. Les modèles JDBC fournissent un moyen de gérer la connexion avec la base de données et ne vous protègent pas nécessairement de l'injection SQL. Vous êtes toujours plus que capable d'écrire du code minable avec un modèle JDBC vulnérable à l'injection SQL.

Modifier Pour résoudre le problème de mise à jour de votre question. Vous pouvez le faire, il existe une méthode simple query dans le modèle JDBC, mais cela rendrait vulnérable à l'injection SQL. La réponse simple: toujours utiliser les instructions préparées. La seule fois où vous pouvez éviter de les utiliser en toute sécurité est si vous n'incluez aucune entrée dans la requête de l'utilisateur. Cependant, vous êtes de loin préférable d'utiliser une déclaration préparée, même dans ces cas, au cas où votre hypothèse serait incorrecte ou changerait dans le futur. Toujours, toujours, toujours utiliser des déclarations préparées. Il y a également des avantages de performance à les utiliser car le moteur SQL peut mettre en cache l'instruction compilée pour une utilisation ultérieure, plutôt que d'avoir à recompiler l'instruction SQL à chaque fois.

+0

J'ai projet et je veux montrer que l'utilisation de JDBC avec Spring pourrait conduire à l'injection sql. Est-il possible de faire cela avec le printemps et jdbc? Aussi je peux utiliser jdbc standard (je veux dire sans état préparé) avec le printemps – user813056

+0

@ user813056 Voir mes modifications –