SQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验不足的应用程序。所以,在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性要求很高的应用中(比如银行软件),经常使用将SQL语句全部替换为存储过程这样的方式,来防止SQL注入。这当然是一种很安全的方式,但我们平时开发中,可能不需要这种死板的方式。

1.${}模糊查询存在SQL注入的例子:(${}未编译,只是对其进行拼接,相当于Statement)

SQL:

Java测试:

本来是模糊查询名字,结果对描述添加了过滤。

Preparing: SELECT * FROM haulinfo WHERE bigname like %% and bigdescription like 阳城% and bigStatus = ?

Parameters: 未开始(String)

Total: 2

2. bind + #{} 模糊查询 防止SQL注入 (#{}进行预编译,传递的参数不进行编译,只作为参数,相当于PreparedStatement)

bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:

SQL:

Java测试:

Preparing: SELECT * FROM haulinfo WHERE bigname like ? and bigStatus = ?

Parameters: %% and bigdescription like 阳城%(String), 未开始(String)

Total: 0

3.另一种模糊查询方法select departmentid,updepartmentid,departmentname from

department where departmentid like concat(#{departmentid},%)

【结论】在编写MyBatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止SQL注入攻击。

#{}:相当于JDBC中的PreparedStatement

${}:是输出变量的值

简单说,#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

如果我们order by语句后用了${},那么不做任何处理的时候是存在SQL注入危险的。你说怎么防止,那我只能悲惨的告诉你,你得手动处理过滤一下输入的内容。如判断一下输入的参数的长度是否正常(注入语句一般很长),更精确的过滤则可以查询一下输入的参数是否在预期的参数集合中。

mybaits的模糊查询_mybatis模糊查询防止SQL注入(很详细)相关推荐

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

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

  2. preparedstatement打印sql语句_Mybatis是这样防止sql注入的

    链接:https://juejin.im/post/5e131203e51d4541082c7db3 Mybatis这个框架在日常开发中用的很多,比如面试中经常有一个问题:$和#的区别,它们的区别是使 ...

  3. c3p0 参数 模糊查询_mybatis之动态sql,模糊查询,结果集处理,mybatis分页及特殊字符处理...

    目标及项目目录结构 目标 1.mybatis动态sql 2.模糊查询 3.查询返回结果集的处理 4.分页查询 5.特殊字符处理 项目的目录结构 1.mybatis动态sql If.trim.forea ...

  4. php拼音模糊查询,PHP模糊查询技术实例分析【附源码下载】

    本文实例讲述了PHP模糊查询技术.分享给大家供大家参考,具体如下: 简介 从本质上揭密PHP模糊查询技术 功能 根据输入的关键字查找相关用户 PHP用户查询器案例分析 课程目标 掌握PHP模糊技术的应 ...

  5. oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

  6. 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

    前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...

  7. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

    1.前缀查询(prefix) //prefix前缀查询 @Testpublic void test15() throws UnknownHostException {//1.指定es集群 cluste ...

  8. java mongodb 模糊查询_Java操作MongoDB插入数据进行模糊查询与in查询功能的方法

    Java操作MongoDB插入数据进行模糊查询与in查询功能 由于需要用MongoDB缓存数据,所以自己写了一套公共的存放和读取方法 具体如下: 存放mongodb: /** * 公共方法:设置Obj ...

  9. vc mysql 查询_VC++数据库模糊查询及精确查询示例代码分享

    VC++数据库模糊查询及精确查询示例代码分享是小编为大家带来的一个VC++电话簿程序中的模糊查询例子源代码,结合数据库,可以学习研究下简单一点的模糊查询和精确查询,希望能对大家有帮助,,赶紧来详细了解 ...

最新文章

  1. 小技巧—设置IIS禁止网站放下载电影文件
  2. python filter()函数(与map()、reduce()函数用法类似,根据给定函数判断列表元素是True还是False,返回剔除元素后的元素列表)
  3. 用 RTC 打造一个音乐教育 App,需要解决哪些音质难题?
  4. 【.Net Micro Framework PortingKit(补) – 1】USB驱动开发 1
  5. 最简单的c语言的编程题目,编程列入考题
  6. [转载] 【数学问题】利用python求解表达式
  7. spring p2p项目html,springboot2.x项目实战视频教程p2p金融中等项目
  8. python getopt_Python getopt
  9. Zabbix之Python发送邮件
  10. requestAnimationFrame()方法实现帧动画
  11. 淘宝和网易云怎样知道你喜欢什么?终于有人把推荐系统讲明白了
  12. 放弃OneNote,拥抱 Obsidian
  13. 华为云.通信云服务激活无限商业潜力
  14. 解决selenium自动关闭浏览器
  15. HTML如何引入md5算法,MD5算法实现
  16. 无源领域自适应:Source Hypothesis Transfer for Unsupervised Domain Adaptation
  17. 修改机顶盒设置移动焦点颜色
  18. 视频直播系统源码,平台在日间和夜间模式之间来回切换
  19. 基于IDL的高分二号影像批量预处理程序
  20. 最全可白嫖之高光谱图像数据处理(格式转换,数据增强,通道剪切,大小裁剪,光谱显示,折线图表示)

热门文章

  1. 在C++中加载TorchScript模型
  2. C++ OP相关注意事项
  3. CentOS7下启动Nginx出现Failed to start nginx.service:unit not found
  4. CentOS7.4 安装mongodb
  5. java正则表达式 匹配%号_java正则表达式匹配带有括号的电话号为什么匹配不上...
  6. ValueError: urls must start with a leading slash
  7. android ecplise 的 项目结构目录
  8. 新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署
  9. Deployment
  10. CentOS7安装配置VSFTP