Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MyBatis Order By注入错误

MyBatis Order By注入错误

作者头像
明明如月学长
发布于 2021-08-27 09:38:35
发布于 2021-08-27 09:38:35
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

在开发过程中,安全问题非常重要,一定要注意sql注入问题。

常见的写法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
order by ${orderBy}  ${orderType}

这里orderBy, orderType是前端传过来的话很容易产生sql注入问题。

《Mysql Order By注入总结》专门讲了如何利用这点进行常见的和猜测的sql注入。

为什么这样呢,因为mybatis里  $部分是原样输出的,拼接字符串的形式。

建议使用#方式,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
order by #{orderBy}  #{orderType}

#{}是经过预编译的,是安全的,而${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在sql注入。

建议先在使用工具类对此类参数进行过滤,避免传到数据库中执行SQL报错。

类似于《图解Javad多线程设计模式》中所讲的“Balking模式”的思路,通过参数校验来保护目标处理。

推荐两种做法。

第一种:通过工具类比如用正则表达式,判断是否有除了英文大小写,数字和下划线外的其他特殊字符。

第二种:编写工具类,对orderType匹配是否为DESC,desc,ASC,asc四个字符串,orderBy是否在指定的规定Set的属性中。

这里Set建议使用不可变集合。

如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static final Set VALID_COLUMNS_FOR_ORDER_BY
  = Collections.unmodifiableSet(Stream
      .of("acc_number","branch_id","balance")
      .collect(Collectors.toCollection(HashSet::new)));

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static final Set VALID_COLUMNS_FOR_ORDER_BY = ImmutableSet.of("acc_number","branch_id","balance");

工具类这里就不给出来了,写出来很容易。

相关文章:

https://www.programering.com/a/MzM1gDMwATE.html

https://www.baeldung.com/sql-injection

https://www.cnblogs.com/chyu/p/4389701.html

如果觉得本文对你有帮助,欢迎点赞评论,欢迎关注我,我将努力创作更多更好的文章。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
8.9 Selenium元素定位方式
元素的定位应该是自动化测试的核心,要想操作一个元素,首先应该识别这个元素象。webdriver提供了一系列的对象定位方法,常用的有以下几种:
清风穆云
2021/08/09
1.4K0
selenium自动化测试报告_selenium自动化测试断言
注意:driver.close() ,当前关闭的是主窗口,只有完成页面切换才可以关闭当前新的页面
全栈程序员站长
2022/11/15
2.6K0
selenium自动化测试报告_selenium自动化测试断言
Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
判断button是否显示,和is_displayed()容易混淆的是is_enabled()。
软件测试君
2022/12/05
1K0
Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
探索自动化测试工具:Selenium的威力与应用
Selenium可以在多种主流浏览器中运行,包括Chrome、Firefox、Edge等。这使得开发人员可以确保他们的Web应用程序在各种浏览器中都能正常运行。
小馒头学Python
2023/11/30
8570
探索自动化测试工具:Selenium的威力与应用
【Python爬虫实战】Selenium自动化网页操作入门指南
在现代网络开发和数据爬取中,Selenium 已成为不可或缺的自动化工具之一。无论是用于测试、数据抓取,还是模拟用户行为,Selenium 都可以在不干预的情况下自动化浏览器操作,为开发者节省大量时间和精力。本指南将带您从 Selenium 的安装配置到高级操作,逐步掌握网页自动化的核心技巧。
易辰君
2024/11/07
1.3K0
彻底学会Selenium元素定位
最近收到不少初学UI自动化测试的小伙伴私信,对于元素的定位还是有些头疼,总是定位不到元素,以及不知道用哪种定位方式更好。
测试蔡坨坨
2022/12/21
7.8K0
彻底学会Selenium元素定位
大模型开发实战:(一)使用 Selenium 进行网页爬虫
Selenium 由 Jason Huggins 于 2004 年发起,最初名为 JavaScript Testing Framework,后因受到希腊神话中“月亮女神 Selene”的启发而更名为 Selenium。它最初是为了解决网页自动化测试需求而诞生的开源工具,但因其能模拟真实浏览器操作(如点击、输入、滚动等),也被广泛用于网页数据爬取。爬虫工具有很多,例如 BeautifulSoup4,为什么选择自动化测试工具 Selenium 进行爬虫?目前绝大部分 Web 应用都使用 JavaScrip 动态加载数据,而 BeautifulSoup4 只能解析初始页面的 HTML 源码,对于动态加载的数据无法获取,因此使用 Selenium 模拟用户,完成数据加载的操作。
张高兴
2025/05/21
5520
大模型开发实战:(一)使用 Selenium 进行网页爬虫
Python爬虫(二十一)_Selenium与PhantomJS
本章将介绍使用Selenium和PhantomJS两种工具用来加载动态数据,更多内容请参考:Python学习指南 Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。 Selenium可以根据我们的指令,让浏览器自动加载页面,获取需要的页面,甚至页面截屏,或
用户1174963
2018/01/17
2.8K0
Python爬虫(二十一)_Selenium与PhantomJS
全网最全关于selenium webdriver 8大元素定位详解
元素的定位应该是自动化测试的核心,想要操作一个元素,首先应该识别这个元素。Webdriver提供了一系列的元素定位方法。
全栈程序员站长
2022/06/29
1.9K0
全网最全关于selenium webdriver 8大元素定位详解
自动化测试——selenium(环境部署和元素定位篇)
一、什么是selenium? > 一个web自动化测试工具; 二、主流的自动化工具: > QTP:收费 支持(支持web、桌面软件自动化) > selenium:免费,开源 只支持web项目 > Robot frameword: 基于Python扩展关 键字驱动自动化工具 注意:要是用selenium自动化工具,要先下载安装selenium 一、web自动化环境部署 1.1 selenium安装 1、安装 在cmd 直接输入 :pip install selenium 2、卸载: 在cmd输入:pip uninstall selenium 3、查看: pip show selenium 或者 pip list pip 是python中包管理工具(可安装,可卸载,查看python工具),使用pip的时候必须联网 有的输入 pip install selenium 会提示出现 ‘pip’ 不是内部或外部命令,也 不是可运行的程序或批处理文件。产生这个原因python环境内部没有 pip 路径,则需要我们收到导入 解决方法: 1、找到我们python工具中的pip所在文件夹,复制其路径
伤心的辣条
2022/09/08
2.2K0
自动化测试——selenium(环境部署和元素定位篇)
Selenium工具学习
他是基于XML(标记语言)、Path的简称, 他是一种在xml文档中查找元素信息的语言。
用户11097514
2024/05/30
1720
Selenium工具学习
【Python爬虫实战】深入解析 Selenium:从元素定位到节点交互的完整自动化指南
Selenium 是进行网页自动化操作的强大工具,在测试、数据抓取、用户行为模拟等领域广泛应用。本指南将带您详细了解如何在 Selenium 中查找和定位页面元素,并深入介绍各种节点交互方法,包括点击、输入文本、选择选项等操作。无论您是初学者还是经验丰富的开发者,本篇文章将帮助您掌握 Selenium 自动化的核心技能,实现更高效的网页自动化操作。
易辰君
2024/11/07
8760
Selenium 4 有哪些不一样?
众所周知,Selenium在2021年10月13号发布了Selenium4,目前最新的版本应该是Selenium 4.4.0。
测试蔡坨坨
2022/08/28
2K0
Selenium 4 有哪些不一样?
Selenium3元素定位详解与封装
在学习自动化测试之前,首先需要思考清楚的是为什么需要学习自动化测试,以及今天业界谈的研发效能对测试而言意味着什么?其实这就需要在测试以及整体研发的角度来思考问题,在今天这样的市场环境中,打造高质量的持续交付产品质量,基本是所有互联网研发团队的测试团队都追求的一个方向。在敏捷流行的今天,以及新的技术在企业全面的落地,在测试而言,就需要通过测试技术的手段以及质量管理的思维能力,来提升测试效率,和交付满足市场期待的产品质量。自动化测试是所有测试形式里面在目前而言,是最基础的也是最核心的,因为自动化测试连接了功能测试以及高阶的测试开发的测试技术栈的知识体系。即使初级的测试同学,也得具备自动化测试的思维能力和技术能力。
无涯WuYa
2021/10/13
9800
Selenium3元素定位详解与封装
自动化测试工具Selenium的基本使用方法
由于requests模块是一个不完全模拟浏览器行为的模块,只能爬取到网页的HTML文档信息,无法解析和执行CSS、JavaScript代码,因此需要我们做人为判断;
江一铭
2022/06/17
2.7K0
《手把手教你》系列练习篇之7-python+ selenium自动化测试 -压轴篇(详细教程)
  “压轴”原本是戏曲名词,指一场折子戏演出的倒数第二个剧目。在现代社会中有很多应用,比如“压轴戏”,但压轴也是人们知识的一个盲区。“压轴”本意是指倒数第二个节目,而不是人们常说的倒数第一个,倒数第一个节目称“压台”。想看“压台篇”,敬请关注宏哥
北京-宏哥
2019/12/10
1.4K0
《手把手教你》系列练习篇之7-python+ selenium自动化测试 -压轴篇(详细教程)
自动化-Selenium 3-常用API(Python版)
ActionChains类提供的鼠标事件常用方法(perform()执行所有ActionChains中存储的行为):
wangmcn
2022/07/22
1.4K0
自动化-Selenium 3-常用API(Python版)
ChatGPT与基于GUI的自动化测试
当使用Edge浏览器结合Selenium框架生成百度查询测试代码时,你可以使用以下Python代码示例:
顾翔
2024/09/10
2260
ChatGPT与基于GUI的自动化测试
selenium最大化浏览器-Web UI自动化测试之Selenium工具篇
  注意:3.0 版本下所有浏览器除了需要安装 框架 以外,还需要安装对应的驱动程序
宜轩
2022/12/26
2K0
爬虫最终杀手锏 — PhantomJS 详解(附案例)
Selenium: 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 Phantomjs 的工具代替真实的浏览器。
全栈程序员站长
2022/09/06
2.4K0
推荐阅读
相关推荐
8.9 Selenium元素定位方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验