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方法传值即可。

使用好处:

  1. 代码的可读性和可维护性.
  2. PreparedStatement尽最大可能提高性能.
  3. 最重要的一点是极大地提高了安全性.

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注入的方法相关推荐

  1. sql注入及mybatis防止sql注入

    一.Sql 注入漏洞详解 Sql 注入产生原因及威胁: 当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句.这种网站内部直接发送的Sql ...

  2. Mybatis中SQL注入攻击的3种方式,真是防不胜防!

    作者 | sunnyf 来源 | https://www.freebuf.com/vuls/240578.html 前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种O ...

  3. java中sql语句怎么把开始和结束时间作为参数写sql查询_聊一聊MyBatis 和 SQL 注入间的恩恩怨怨

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 引言 MyBatis 是一种持久层框架,介于 JDBC 和 Hi ...

  4. java开发中推荐的防御sql注入方法_防御SQL注入的方法总结

    SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入漏洞存在的原因,就是拼接 SQL 参数.也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致 ...

  5. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一: mysql_real_escape_str ...

  6. sql注入修复方法是_旧的方法是修复我们可以看到的内容。

    sql注入修复方法是 When envisioning the futurestate of a company or a service, we're usually faced with the ...

  7. mysql 防注入 php_PHP+mysql防止SQL注入的方法小结

    本文实例讲述了PHP+mysql防止SQL注入的方法.分享给大家供大家参考,具体如下: SQL注入 例:脚本逻辑 $sql = "SELECT * FROM user WHERE useri ...

  8. decimal转为string sql_PHP+Mysql防止SQL注入的方法

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一:[1] mysql_real_escape_ ...

  9. mysql简单防注入_mysql防止sql注入的方法

    mysql防止sql注入的方法 发布时间:2020-08-25 14:07:29 来源:亿速云 阅读:98 作者:小新 这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因 ...

  10. php防止sql注入处理方法

    解决的办法是将php.ini的magic_quotes_gpc设置为Off 在php.ini的magic_quotes_gpc=On的情况下,如果输入的数据有单引号(').双引号(").反斜 ...

最新文章

  1. Spring框架中的设计模式(五)
  2. 教师资格证考试计算机知识题库,教师资格证考试题库
  3. Splitting into digits
  4. 阿里资深技术专家:如何快速成长为技术大牛?
  5. 旋转炫酷相册-快制作你喜欢源码
  6. Java输入若干整数(不少于10个),用–1结束输入,以每行三个数的形式输出,再从这些数中选出所有奇数放在另一个数组中,然后输出.
  7. Cyclone IV FPGA 器件笔记
  8. matlab 多项式表达,Matlab多项式运算
  9. Linux 下安装Eclipse C++
  10. javascript--方法(函数)
  11. 使用envi对图像进行对比度拉伸并保存
  12. 中国计算机省份排名,2019中国省份经济排行_中国各省份经济排名
  13. 【程序员必备】七夕表白攻略:教你用代码轻松打动她的内心!
  14. C++学习路线图(新)
  15. style常见的样式属性
  16. requests高阶 BS4
  17. bindService不调用onServiceConnected的问题
  18. 嫦娥奔月-第13届蓝桥杯Scratch选拔赛真题精选
  19. excel中html批量转化为pdf文件,如何将大量的Excel转换成PDF?
  20. ACP敏捷认证考试及格线以及考试知识占比分析

热门文章

  1. Snap7 西门子S7系列PLC的通信库 简介
  2. colorui 使用iconfont图标
  3. 上课解除教师机控制(红蜘蛛)超详细
  4. 普中51开发板,用XPT2046芯片实现AD数模转换。protues仿真用ADC0808实现AD数模转化
  5. java毕业设计水库洪水预报调度系统源码+lw文档+mybatis+系统+mysql数据库+调试
  6. 《Java核心技术 卷1》
  7. 基于java+SpringBoot+HTML+Mysql社区管理系统(小区管理系统)
  8. 《数字图像处理》第三版笔记(一)模糊处理
  9. 基于Access的学生信息管理系统设计(下):窗体设计
  10. lora三层服务器协议,LoRa以及LoRa包含的几种协议