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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

mysql SQL注入攻击 解决Orm工具Hibernate,Mybatis, MiniDao 的 sql 预编译语句 ;解决非Orm工具JDBCTemplate的 - rgqancy(任国强) - 博客园
https://www.cnblogs.com/rgqancy/p/15046439.html

参数化 SQL - 国内版 Bing
https://cn.bing.com/search?FORM=U227DF&PC=U227&q=参数化+SQL

SQL参数化查询 - whatgorun - 博客园
https://www.cnblogs.com/kdp0213/p/8554032.html#:~:text=参数化查询 (Parameterized Query 或 Parameterized,Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。

posted @ 2021-07-22 21:16  任国强  阅读(363)  评论(0编辑  收藏  举报