2011-12-12 476 views
8

我想知道Spring MVC如何處理SQL注入(以及其他安全問題:XSS,代碼[javascript]注入等)。我主要談的是逃避添加到數據庫等的值。我似乎無法找到任何答案,因爲每次搜索涉及依賴注入的spring sql注入結果都會出現。Spring(MVC)SQL注入避免?

我的流程如下:在客戶端瀏覽器中,我發出一個包含JSON的請求,其中包含一些查詢參數(不是SQL語句,這太愚蠢 - 要在JS中形成SQL查詢)。當請求到達Controller中正確註釋的方法時,請求將通過使用Jackson的@RequestBody映射到「請求對象」。現在這個對象被髮送到DAO,在那裏使用JDBC模板I查詢數據庫(並使用RowMapper I映射結果)。

在DAO我有類似:

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注入安全嗎? 鑑於流經Spring MVC的非基於JDBCTemplate的查詢是安全的嗎?

我們可以就此進行一些討論嗎?

回答

15

任何時候當你建立通過串聯查詢你vunerlable到注入攻擊

通過你的參數正確:

jdbcTemplate.queryForInt(sql, args, argTypes) 

例如:

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

是的,其實這是有點明顯,我。問題是......在像上面解釋過的那種情況下,Spring會逃脫任何事情?現在,回想起來,我認爲這不是,但只是爲了確定我寧願問。 – BogdanSorlea

+2

但你還沒有實現它。春天不會逃脫任何事情。根據您提供的信息,上述內容是您唯一的問題。 – Mick

+1

這個問題並不僅僅涉及到spring或java。完全接受這個答案。 – Mukus