2015-07-22 2312 views
2

我對SQL注入一些代碼,類似這樣的關注與春天的JdbcTemplate:JdbcTemplate的動態表名和SQL注入

jdbcTemplate.query("SELECT * FROM " + tableName, new TableMapper()); 

的「表名」變量由串聯添加,因爲它是不可能通過它作爲JdbcTemplate的一個參數。

「tableName」變量只能由管理員編輯,但我想知道在技術上是否可以對此查詢執行SQL注入攻擊。

否則你能描述一個安全的方法來做到這一點嗎?

+0

你執行任何種類'tableName'禁制的? –

+0

不,我不知道如何有效地進行消毒,因爲我不知道表名。對此有何想法? – xte

+0

它不應被編輯,但可從現有表/視圖列表中進行選擇。獲取的可用表格列表是數據庫特定的。在您的問題中添加適當的數據庫標記 – StanislavL

回答

-3

是的,這是可能的。我建議修改你這樣的代碼:

jdbcTemplate.query("SELECT * FROM ?", new Object[]{tableName},new TableMapper()); 

此安全插入表名到你的查詢;)

+1

不幸的是,無法將表名作爲參數傳遞給jdbc - jdbcTemplate。其他參數作爲參數傳遞,但表名不能以這種方式傳遞。 – xte