web-dev-qa-db-ja.com

Spring JDBCはSQLインジェクション攻撃からの保護を提供しますか?

Springの JdbcTemplate 抽象化は多くの機能を提供しますが、SQLインジェクション攻撃からの保護を提供するような方法で使用できますか?

たとえば、適切に定義されたパラメーター化で PreparedStatement を使用することで得られる保護のようなものです。

28
brabster

間違いなくそうです。この例は、Spring 3.0のドキュメントからの抜粋です(ただし、2。*でも同じです)。

String lastName = this.jdbcTemplate.queryForObject( 
        "select last_name from t_actor where id = ?", 
        String.class, 1212L); 

ご覧のとおり、stronglyは準備されたステートメントを優先します(これは舞台裏で使用している必要があります)。プレースホルダー(?)とパラメーターに入力するオブジェクトの配列を提供します。 (最後のパラメーターは期待される結果のタイプですが、これはこの質問にはあまり関係ありません。)

また、NamedParameterJdbcTemplateを使用してMapでパラメーターを指定することもできます。これは、おそらく効率は劣りますが、ニーモニックの方が確実です。

29
Donal Fellows