Spring JdbcTemplateマルチパラメータクエリー、likeファジイクエリーの処理方法
2182 ワード
最近springのjdbctemplateクエリーを使用して、SpringのIoCコンテナにJdbcTemplateのbeanを構成し、DataSourceを注入してから、JdbcTemplateをカスタムDAOに注入します.
本題に入ると、原生のjdbcでsql接合問題が存在し、接合すると自然にsql注入ホールの問題が発生する.我々はsql注入ホールを避けるには、前処理の方法にほかならない.sql注入ホールの根本的な原因は直接接合パラメータであるため、プロジェクト中のsqlはsql接合パラメータを拒否する.
(一):多パラメータを処理する処理方式
例を直接見ます.
この例は任意に追加されていますが、ここで言うのはsqlを定義するときにStringBufferを使うのが一番いいということです.これは柔軟です.
(二):likeのパラメータ要求方式を使用する
この場所のlikeは多くの方法でテストされています
sql+=“and p.name=?”;queryList.add("%"+ name + "%") ;これではだめです.また、自分の考えのsql+=「and p.name='%?%」;queryList.add(name")、このように処理して、直接認識しませんか?'、エスケープされたはずです.テストの上の方法は実行可能です.あなたたちを助けてほしいです!
本題に入ると、原生のjdbcでsql接合問題が存在し、接合すると自然にsql注入ホールの問題が発生する.我々はsql注入ホールを避けるには、前処理の方法にほかならない.sql注入ホールの根本的な原因は直接接合パラメータであるため、プロジェクト中のsqlはsql接合パラメータを拒否する.
(一):多パラメータを処理する処理方式
例を直接見ます.
public List getAllOperator(int toPage, int pageSize,
String login, String name, String oper_group_id, int state) {
String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "
+ "left join oper_group_info as g on p.oper_group_id = g.id where 1 = 1 ";
List
この例は任意に追加されていますが、ここで言うのはsqlを定義するときにStringBufferを使うのが一番いいということです.これは柔軟です.
(二):likeのパラメータ要求方式を使用する
public List getAllOperator(int toPage, int pageSize,
String login, String name, String oper_group_id, int state) {
String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "
+ "left join oper_group_info as g on p.oper_group_id = g.id where 1 = 1 ";
List
この場所のlikeは多くの方法でテストされています
sql+=“and p.name=?”;queryList.add("%"+ name + "%") ;これではだめです.また、自分の考えのsql+=「and p.name='%?%」;queryList.add(name")、このように処理して、直接認識しませんか?'、エスケープされたはずです.テストの上の方法は実行可能です.あなたたちを助けてほしいです!