簡體   English   中英

哪一個更安全的SQL注入-NamedParameterJdbcTemplate或SimpleJdbcTemplate?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM