1. 程式人生 > 其它 >mysql SQL注入攻擊 解決Orm工具Hibernate,Mybatis, MiniDao 的 sql 預編譯語句 ;解決非Orm工具JDBCTemplate的

mysql SQL注入攻擊 解決Orm工具Hibernate,Mybatis, MiniDao 的 sql 預編譯語句 ;解決非Orm工具JDBCTemplate的

sql 預編譯語句_牛客部落格
https://blog.nowcoder.net/n/198be55df4a4406d8eb9dc2482272061?from=nowcoder_improve

hibernate sql 注入 - 國內版 Bing
https://cn.bing.com/search?q=hibernate+sql+注入&qs=n&form=QBRE&sp=-1&pq=hibernate+sql+注入&sc=0-16&sk=&cvid=A6C0E9EBECBA4A3D882E116FE3ADE171

Mybatis 框架下 SQL 注入攻擊的 3 種方式,真是防不勝防! - 知乎

https://zhuanlan.zhihu.com/p/210732421

Hibernate HQL注入攻擊入門 - tian830937 - 部落格園
https://www.cnblogs.com/tian830937/p/4456500.html

Hibernate HQL注入攻擊入門 – 小馬部落格
https://www.i0day.com/1666.html

怎樣利用Hibernate來防止SQL注入的方法-mysql教程-PHP中文網
https://www.php.cn/mysql-tutorials-373616.html

hibernate規避SQL注入例項 - 不想下火車的人 - 部落格園
https://www.cnblogs.com/wuxun1997/p/10133010.html

Hibernate框架中的HQL注入漏洞_Exploit的小站~-CSDN部落格_hql注入
https://blog.csdn.net/u011721501/article/details/43918203

使用Hibernate防止SQL注入的方法 - 卡洛斯利伯 - 部落格園
https://www.cnblogs.com/klslb/p/7146889.html

sql預編譯 - 國內版 Bing
https://cn.bing.com/search?FORM=U227DF&PC=U227&q=sql預編譯

mybatis深入理解(一)之 # 與 $ 區別以及 sql 預編譯 - SegmentFault 思否

https://segmentfault.com/a/1190000004617028#:~:text=sql預編譯 定義 sql 預編譯指的是資料庫驅動在傳送 sql 語句和引數給 DBMS 之前對,sql 時,就不需要重新編譯。 為什麼需要預編譯 JDBC 中使用物件 PreparedStatement 來抽象預編譯語句,使用預編譯 預編譯階段可以優化。

jdbcTemplate sql 注入 - 國內版 Bing
https://cn.bing.com/search?q=jdbcTemplate+sql+注入&qs=n&form=QBRE&sp=-1&pq=jdbctemplate+sql+注入&sc=0-19&sk=&cvid=1BAE8BD1D33C466F97BA7F2EDB18FF15

JDBCtemplate防範Sql注入攻擊 - 簡書
https://www.jianshu.com/p/c1a92243b1f2

Spring boot JdbcTemplate sql注入測試 - 婦愁者纞萌 - 部落格園
https://www.cnblogs.com/fczlm/p/14293888.html

【spring】jdbcTemplate之sql引數注入 - 淡丶無慾 - 部落格園
https://www.cnblogs.com/VergiLyn/p/6161081.html

SQL 注入就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。
在使用JAVA ORM時基本不用擔心防範SQL injection,而在使用JDBCtemplate時,由於用到了sql命令,所以可能會注意對Sql注入得防範。
下面以sql語句
select * from table_name where id = 1 OR 1=1
為例進行分析。

Demo1
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody
List getCustomerByid(@RequestParam String id) {
return jdbcTemplate.query(
"SELECT * FROM customers WHERE ?",
new CustomerMapper(),id);
}
在postman中進行實驗

可以看到JDBCtemplate對引數化sql查詢進行了驗證,從而防範了sql注入。

Demo2
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody
List getCustomerByid(@RequestParam String id) {
String sql = "SELECT * FROM customers WHERE +id";
return jdbcTemplate.query(sql, new CustomerMapper());
}
在postman中進行實驗

Paste_Image.png

在這種直接拼接sql語句的情況下,發生了sql入侵。

總結
JDBCtemplate中對引數化的sql查詢有著良好的驗證機制,因此建議使用引數化SQL的方式

SQL 注入就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。
在使用JAVA ORM時基本不用擔心防範SQL injection,而在使用JDBCtemplate時,由於用到了sql命令,所以可能會注意對Sql注入得防範。
下面以sql語句

在這種直接拼接sql語句的情況下,發生了sql入侵。

總結
JDBCtemplate中對引數化的sql查詢有著良好的驗證機制,因此建議使用引數化SQL的方式

作者:0xCoffee
連結:https://www.jianshu.com/p/c1a92243b1f2
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。