2011-12-12 19 views
8

私はSpring MVCがSQLインジェクション(そして他のセキュリティ問題:XSS、コード[javascript]インジェクションなど)をどのように処理するのかと思います。私は主に、DBなどに追加される値をエスケープすることについて話しています。私は依存性注入が発生するspring SQLのインジェクション結果を検索するたびに何か答えが見つからないようです。Spring(MVC)SQLインジェクション回避?

私の流れは次のとおりです。クライアントブラウザから、私はいくつかのクエリパラメータ(JSではSQLクエリを形成するにはあまりにも愚かなSQL文ではない)を持つJSONからなるリクエストを行います。要求がコントローラ内の適切な注釈付きメソッドに到達すると、リクエストは@RequestBody経由でJacksonを使用して「要求オブジェクト」にマップされます。このオブジェクトは、DAOに送られます。ここで、JDBC Template Iを使用してdbを照会します(そしてRowMapperを使用して結果をマップします)。

public int countAll(RequestObject request) { 
    String sql = "SELECT count(*) FROM employees WHERE name = '" + request.getName() + "'"; 

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 
    int count = jdbcTemplate.queryForInt(sql); 

    return count; 
} 

今すぐSQLインジェクションからの安全なこのアプローチである:DAOで

私のようなものがありますか? Spring以外のJDBCTemplateベースのクエリは、Spring MVCを流れるように安全ですか?

これについて少し議論できますか?

答えて

15

いつでもあなたは

が正しくパラメータを渡すあなたがインジェクション攻撃に対してvunerlableある連結によってクエリを作成:はい、実際にそれは私にはやや明らかだ

 JdbcTemplate insert = new JdbcTemplate(dataSource); 
    insert.update("INSERT INTO PERSON (FIRSTNAME, LASTNAME) VALUES(?,?)", 
      new Object[] { firstName, lastName }); 
+0

:例えば

jdbcTemplate.queryForInt(sql, args, argTypes) 

を。問題は...私が上で説明したような場合、春は何かをエスケープするかしないか?今考えて、私はそうではないと思っていますが、確かに私はむしろ聞きたいと思います。 – BogdanSorlea

+2

まだ、あなたはそれを実装していません。春は何もエスケープしません。あなたが与えた情報に基づいて、あなたの唯一の問題です。 – Mick

+1

そして、この質問はspringやjavaに関係するだけではありません。完全にこの答えを受け入れる。 – Mukus

関連する問題