19
SpringのJdbcTemplate抽象化は多くの機能を提供しますが、SQLインジェクション攻撃から保護するような方法で使用できますか?Spring JDBCはSQLインジェクション攻撃から何らかの保護を提供しますか?
たとえば、保護の種類のように、適切に定義されたパラメータ化を使用してPreparedStatementを使用するとします。
SpringのJdbcTemplate抽象化は多くの機能を提供しますが、SQLインジェクション攻撃から保護するような方法で使用できますか?Spring JDBCはSQLインジェクション攻撃から何らかの保護を提供しますか?
たとえば、保護の種類のように、適切に定義されたパラメータ化を使用してPreparedStatementを使用するとします。
最も確かにします。この例では、まっすぐ春3.0のドキュメント(ただし、2 *に同じである)からである:あなたが見ることができるように
String lastName = this.jdbcTemplate.queryForObject(
"select last_name from t_actor where id = ?",
String.class, 1212L);
、それは強く恩恵は、それはあなたのために舞台裏で使用している必要がありステートメントを(準備):プレースホルダ(?
)でパラメータを指定し、パラメータを満たすオブジェクトの配列を指定します。
NamedParameterJdbcTemplate
を使用して、Map
のパラメータを指定することもできます(これはおそらく効率的ではありませんが、ニーモニックが確実に高くなる可能性があります)。
クール - 主なことは、SpringのAPIでパラメータ化されたメソッドを使用することは、保護が保持されるような方法で基本Java PreparedStatementのパラメータ化されたメソッドに確実にマッピングされることです。 – Brabster
彼らはすべきです。ベストプラクティスをより便利な方法で実装することについての春は、PreparedStatementを使用することをお勧めしています...まあ、私はJava 1.1で遭遇したJDBCの最初のバージョンでは、 (私は、すべてのJDBCドライバがそれを正しく取得するかどうかはわかりませんが、もしそうでなければ、それを使用していないための魅力的な理由が考えられます)。 –