当前位置: 首页 > news >正文

SqlUtils 工具类

一、类代码展示

作用:校验sql注入风险

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SqlUtil {/*** 定义常用的 sql关键字*/public static final String SQL_REGEX = "select |insert |delete |update |drop |count |exec |chr |mid |master |truncate |char |and |declare ";/*** 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序)*/public static final String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";/*** 检查字符,防止注入绕过*/public static String escapeOrderBySql(String value) {if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) {throw new UtilException("参数不符合规范,不能进行查询");}return value;}/*** 验证 order by 语法是否符合规范*/public static boolean isValidOrderBySql(String value) {return value.matches(SQL_PATTERN);}/*** SQL关键字检查* 一般检查传入参数的sql注入风险*/public static void filterKeyword(String value) {if (StringUtils.isEmpty(value)) {return;}//传入value中是否存在 SQL_REGEX中的数据库关键词String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|");for (String sqlKeyword : sqlKeywords) {if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1) {throw new UtilException("参数存在SQL注入风险");}}}}

二、测试检查sql关键字

方法:filterKeyword

    public static void main(String[] args) {filterKeyword("select * from user");}

打印结果

Exception in thread "main" com.ruoyi.common.exception.UtilException: 参数存在SQL注入风险at com.ruoyi.common.utils.sql.SqlUtil.filterKeyword(SqlUtil.java:55)at com.ruoyi.common.utils.sql.SqlUtil.main(SqlUtil.java:61)

三、测试校验排序

方法:isValidOrderBySql    :

  •  仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序)
  • 过滤规则: SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"

 常用排序举例:

 支持的用法如下:order by id ascorder by id asc,create_time ascorder by id desc,create_time descorder by id asc,create_time desc
  public static void main(String[] args) {//filterKeyword("select * from user");Console.log(isValidOrderBySql("id"));Console.log(isValidOrderBySql("id,sex"));Console.log(isValidOrderBySql("id,nick_name"));Console.log(isValidOrderBySql("id_,"));Console.log("校验不通过----------------------------------------");Console.log(isValidOrderBySql("id="));}

测试将结果:

true
true
true
true
校验不通过----------------------------------------
false


http://www.mrgr.cn/news/10321.html

相关文章:

  • 如何在IDEA中实现输入中文直接变成规范的英文类名,一笑插件给你解决~
  • Session Cookie Jwt Token常见web授权
  • 用Go实现伪静态URL重写功能
  • 媒体服务zlmediakit系统架构图
  • 【Es】python设置Es最大查询页数
  • sortable中el-table拖拽及点击箭头上下移动row
  • C++ wxWidgets图形界面开发用什么IDE最好?
  • 【精选】分享9款AI毕业论文生成初稿题目网站
  • [SWPUCTF 2023 秋季新生赛]UnS3rialize
  • 【Linux】理解操作系统中的进程状态:阻塞、挂起、运行
  • Isaac Sim仿真平台学习(2)系统架构
  • FastCGI简述
  • Vue开发者工具安装详细教程
  • 全栈杂谈第二期:计算机中的线程
  • 云计算实训36——mysql镜像管理、同步容器和宿主机时间、在容器外执行容器内命令、容器的ip地址不稳定问题、基础镜像的制作、镜像应用
  • 电子电路学习之二极管-1
  • 【ES6新特性】介绍ES6新特性的内容,如var,Let,Const声明变量的区别,解构赋值的概念,字符串的扩展,数组的扩展,以及对象的扩展。
  • 【VectorNet】vectornet网络学习笔记
  • python | 图片转换为 pdf 实现方法
  • SQLserver复制已经存在的表和不存在的表