MyBatis防止SQL注入的方法
MyBatis防止SQL注入的方法
文章目录
- MyBatis防止SQL注入的方法
- 1. 前言
- 2. 示例
- 3. 不用MyBatis防止SQL注入的方法
- 4. 原理
- 5. 参考链接
1. 前言
这个问题其实就是问MyBatis中的#{}和KaTeX parse error: Expected 'EOF', got '#' at position 19: …号的区别,在MyBatis中,#̲{}是预编译处理, {}是字符串替换。MyBatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;MyBatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。使用 #{} 可以有效的防止SQL注入,提高系统安全性。
2. 示例
${param}传递的参数会被当成sql语句中的一部分,比如传递表名,字段名例子:(传入值为id)order by ${param} 则解析成的sql为:order by id#{parm}传入的数据都当成一个字符串,会对自动传入的数据加一个双引号例子:(传入值为id)select * from table where name = #{param}则解析成的sql为:select * from table where name = "id"为了安全,能用#的地方就用#方式传参,这样可以有效的防止sql注入攻击sql注入简介
直接上了百度的例子,感觉一看就清晰明了某个网站的登录验证的SQL查询代码为:strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"恶意填入userName = "1' OR '1'='1";与passWord = "1' OR '1'='1";时,将导致原本的SQL字符串被填为strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"也就是实际上运行的SQL命令会变成下面这样的strSQL = "SELECT * FROM users;"这样在后台帐号验证的时候巧妙地绕过了检验,达到无账号密码,亦可登录网站。所以SQL注入攻击被俗称为黑客的填空游戏。
3. 不用MyBatis防止SQL注入的方法
使用JDBC中的******PreparedStatement******,采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的set方法传值即可。
使用好处:
- 代码的可读性和可维护性.
- PreparedStatement尽最大可能提高性能.
- 最重要的一点是极大地提高了安全性.
4. 原理
MyBatis防止SQL注入的原理:MyBatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值 ,PreparedStatement在执行阶段只是把输入串作为数据处理,不再对sql语句进行解析,准备,因此也就避免了sql注入问题。
PreparedStatement防止SQL注入的原理:JDBC的PreparedStatement会将带’?'占位符的sql语句预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划。对于占位符输入的参数,无论是什么,都不会影响该SQL语句的语法结构了,因为语法分析已经完成了,即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,只会被当做字符串字面值参数。所以的sql语句预编译可以防御SQL注入。而且在多次执行同一个SQL时,能够提高效率。原因是SQL已编译好,再次执行时无需再编译。
5. 参考链接
https://blog.csdn.net/qian_qian_123/article/details/92844194
https://www.cnblogs.com/pressur/p/11226392.html
https://blog.csdn.net/weixin_39986856/article/details/83651847
2022年1月6日 阴
MyBatis防止SQL注入的方法相关推荐
- sql注入及mybatis防止sql注入
一.Sql 注入漏洞详解 Sql 注入产生原因及威胁: 当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句.这种网站内部直接发送的Sql ...
- Mybatis中SQL注入攻击的3种方式,真是防不胜防!
作者 | sunnyf 来源 | https://www.freebuf.com/vuls/240578.html 前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种O ...
- java中sql语句怎么把开始和结束时间作为参数写sql查询_聊一聊MyBatis 和 SQL 注入间的恩恩怨怨
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 引言 MyBatis 是一种持久层框架,介于 JDBC 和 Hi ...
- java开发中推荐的防御sql注入方法_防御SQL注入的方法总结
SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入漏洞存在的原因,就是拼接 SQL 参数.也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致 ...
- mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)
这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一: mysql_real_escape_str ...
- sql注入修复方法是_旧的方法是修复我们可以看到的内容。
sql注入修复方法是 When envisioning the futurestate of a company or a service, we're usually faced with the ...
- mysql 防注入 php_PHP+mysql防止SQL注入的方法小结
本文实例讲述了PHP+mysql防止SQL注入的方法.分享给大家供大家参考,具体如下: SQL注入 例:脚本逻辑 $sql = "SELECT * FROM user WHERE useri ...
- decimal转为string sql_PHP+Mysql防止SQL注入的方法
这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一:[1] mysql_real_escape_ ...
- mysql简单防注入_mysql防止sql注入的方法
mysql防止sql注入的方法 发布时间:2020-08-25 14:07:29 来源:亿速云 阅读:98 作者:小新 这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因 ...
- php防止sql注入处理方法
解决的办法是将php.ini的magic_quotes_gpc设置为Off 在php.ini的magic_quotes_gpc=On的情况下,如果输入的数据有单引号(').双引号(").反斜 ...
最新文章
- Spring框架中的设计模式(五)
- 教师资格证考试计算机知识题库,教师资格证考试题库
- Splitting into digits
- 阿里资深技术专家:如何快速成长为技术大牛?
- 旋转炫酷相册-快制作你喜欢源码
- Java输入若干整数(不少于10个),用–1结束输入,以每行三个数的形式输出,再从这些数中选出所有奇数放在另一个数组中,然后输出.
- Cyclone IV FPGA 器件笔记
- matlab 多项式表达,Matlab多项式运算
- Linux 下安装Eclipse C++
- javascript--方法(函数)
- 使用envi对图像进行对比度拉伸并保存
- 中国计算机省份排名,2019中国省份经济排行_中国各省份经济排名
- 【程序员必备】七夕表白攻略:教你用代码轻松打动她的内心!
- C++学习路线图(新)
- style常见的样式属性
- requests高阶 BS4
- bindService不调用onServiceConnected的问题
- 嫦娥奔月-第13届蓝桥杯Scratch选拔赛真题精选
- excel中html批量转化为pdf文件,如何将大量的Excel转换成PDF?
- ACP敏捷认证考试及格线以及考试知识占比分析
热门文章
- Snap7 西门子S7系列PLC的通信库 简介
- colorui 使用iconfont图标
- 上课解除教师机控制(红蜘蛛)超详细
- 普中51开发板,用XPT2046芯片实现AD数模转换。protues仿真用ADC0808实现AD数模转化
- java毕业设计水库洪水预报调度系统源码+lw文档+mybatis+系统+mysql数据库+调试
- 《Java核心技术 卷1》
- 基于java+SpringBoot+HTML+Mysql社区管理系统(小区管理系统)
- 《数字图像处理》第三版笔记(一)模糊处理
- 基于Access的学生信息管理系统设计(下):窗体设计
- lora三层服务器协议,LoRa以及LoRa包含的几种协议