![](/img/trans.png)
[英]Is the SimpleJdbcTemplate in Spring safe from SQL Injection?
[英]Which one is more safe from SQL injection-NamedParameterJdbcTemplate or SimpleJdbcTemplate?
SQL注入哪一個是安全的:NamedParameterJdbcTemplate還是SimpleJdbcTemplate?
例如,
String sql = "insert into db_table (associateid,comment) values(:associateId,:comments)";
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("associateId", "12345");
paramMap.put("comments", "some comments");
int rowNumber = readTemplate.update(sql, paramMap);
要么
String sql = "insert into db_table (associateid,comment) values(?,?)";
int rowNumber = readTemplate.update(sql,new Object[] {"comments","some comments"} );
第一個使用NamedParameterJdbcTemplate,而第二個使用SimpleJdbcTemplate。 在某些網站中,它的給定與兩者相同,在其他一些網站中,NamedParameterJdbcTemplate是安全的。 任何人都可以清除我的懷疑嗎?
兩者都使用Preparedstatement
來執行查詢。 這些是防止SQL注入的東西。 因此,SQL注入沒有區別。
但是,如果您查看SimpleJdbcTemplate的文檔:
已過時。
從春季3.1開始
支持JdbcTemplate和NamedParameterJdbcTemplate。 JdbcTemplate和NamedParameterJdbcTemplate現在提供SimpleJdbcTemplate的所有功能。
所以你應該使用NamedParameterJdbcTemplate,因為它沒有被刪除。 (遺留代碼可能仍會使用它)
我相信沒有區別,因為它們都與SQL注入保護無關。 它是在底層驅動程序的PreparedStatement中實現的。
例如,您可以查看com.mysql.jdbc.PreparedStatement #setString() 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.