【MyBatis】防止sql注入

这篇具有很好参考价值的文章主要介绍了【MyBatis】防止sql注入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

关于sql注入的解释这里不再赘述。

在MyBatis中防止的sql注入主要分为两种:

        第一种就是MyBatis提供了两种支持动态 sql 的语法 #{} 和 ${},其中${} 是简单的字符串替换,而 #{} 在预处理时,会把参数部分用一个占位符 ? 代替,可以有效的防止sql的注入,面试的时候经常会问到,这里也不再详细赘述;

        第二种是排序防止sql注入,实现方案如下

SQL注入过滤器

以下是sql注入过滤器,当判断出是非法字符时则抛出到自定义的异常类BusinessException中

BusinessException异常类的创建与使用

public class SQLFilter {

    /**
     * SQL注入过滤
     *
     * @param sql 待验证字符串
     */
    public static String filterInject(String sql) {
        if (StringUtils.isBlank(sql)) {
            return null;
        }
        //去掉'|"|;|\字符
        sql = sql.replace("'", "")
                .replace("\"", "")
                .replace(";", "")
                .replace("\\", "")
                .toLowerCase();
        //非法字符
        final String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alert", "drop"};

        //判断是否包含非法字符
        for (String keyword : keywords) {
            if (sql.indexOf(keyword) > 0) {
                throw new BusinessException("SQL包含非法字符");
            }
        }
        return sql;
    }
}

分页工具类

这里我们使用的是PageHelper组件实现分页,需要在pom中引用jar包【com.github.pagehelper】

public class PageUtils {

    public static void initPaging(Map<String, Object> params) {
        //分页参数
        Object pageNumObj = params.get("page");
        Object pageSizeObj = params.get("limit");
        Object sortNameObj = params.get("sortName");
        Object sortOrderObj = params.get("sortOrder");
        //默认分页数为1
        int pageNum = pageNumObj != null ? Integer.parseInt(pageNumObj.toString()) : 1;
        //默认每页大小为10
        int pageSize = pageSizeObj != null ? Integer.parseInt(pageSizeObj.toString()) : 10;
        String orderBy = "";
        if (sortNameObj != null && sortOrderObj != null) {
            orderBy = sortNameObj.toString() + " " + sortOrderObj.toString();
        }
        PageHelper.startPage(pageNum, pageSize, SQLFilter.filterInject(orderBy));
    }

    public static Map<String, Object> filterParams(Map<String, Object> params) {
        Object sortNameObj = params.get("sortName");
        Object sortOrderObj = params.get("sortOrder");
        String orderBy = "";
        if (sortNameObj != null && sortOrderObj != null) {
            orderBy = sortNameObj.toString() + " " + sortOrderObj.toString();
        }
        params.put("orderBy",SQLFilter.filterInject(orderBy));
        return params;
    }


}

分页公共参数实体

@Data
public abstract class Query {

    // 初始分页页码
    private Integer page = 1;

    // 初始分页条数
    private Integer limit = 10;

    // 初始排序字段; sortName = "id"
    private String sortName;

    // 初始排序方式; sortOrder = "asc"
    private String sortOrder;
}

实现分页

实现方法中,【SysUserQuery 】中是我的业务逻辑中的查询参数,但是继承了分页公共参数实体,这里就不列出来了;

分页工具类中的方法由Map接收,由于我这里传的是实体,所以多出来一步实体转成Map操作;

    @Override
    public Result queryPage(SysUserQuery sysUserQuery) {
        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(sysUserQuery), Map.class);
        // 分页
        PageUtils.initPaging(params);
        // 查询数据
        List<SysUserVo> list = sysUserMapper.selectListByQuery(sysUserQuery);
        PageInfo page = new PageInfo(list);
        return new Result(page);
    }

至此结束。文章来源地址https://www.toymoban.com/news/detail-642385.html

到了这里,关于【MyBatis】防止sql注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络安全】SQL注入详解

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。 1:寻找到SQL注入的位置 2:判断服务器类型和后台数据库类型 3:针对不同的服务器和数据库特点进行SQL注入攻击

    2024年02月06日
    浏览(56)
  • 【网络安全】初探SQL注入漏洞

    要想玩SQL注入,一个简单的数据交互页面是需要的,故我们用PHP做一个简易网页,有登录、注册和首页三块内容。 登录需要输入账号密码,等待提交后进入系统; 注册需要输入名字,密码,手机号,照片,等待提交后进入系统; 首页需要利用PHP和数据库联动后的查询语句,

    2024年02月16日
    浏览(43)
  • 网络安全必学SQL注入

    SQL注入漏洞可以说是在企业运营中会遇到的最具破坏性的漏洞之一,它也是目前被利用得最多的漏洞。要学会如何防御SQL注入,首先我们要学习它的原理。 针对SQL注入的攻击行为可描述为通过在用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻

    2024年02月03日
    浏览(62)
  • 网络安全-初学SQL注入&基本概念

    SQL语句:解释SQL(Structured Query Language)是一种用于与关系型数据库进行交互的语言。SQL语句用于执行各种数据库操作,例如插入、更新、删除和查询数据。 用户输入与SQL查询的拼接:说明应用程序通常会接受用户的输入,并将其用作构建SQL查询语句的一部分。这种拼接用户

    2024年02月13日
    浏览(43)
  • 「网络安全」SQL注入攻击的真相

    点击此处即可获得282G网络安全学习资料 我们生活在数据的黄金时代。有些公司将其分析为更好的自己,有些公司为了获利而进行交易,没有一家公司因其价值而自由放弃 - 对于他们的业务和犯罪分子。 SQL(结构化查询语言)是一种非常流行的与数据库通信的方式。虽然许多

    2024年02月07日
    浏览(49)
  • 网络安全之SQL注入及防御(下篇)

    目录 什么是SQL注入? 一,SQL注入会导致什么呢? 二,SQL注入思想与步骤 三,SQL注入的绕过 四,sqlmap工具的使用  五,sql注入的防御方法 总结 什么是SQL注入? SQL注入(SQL Injection)是一种常见的网络攻击手段,是因为应用程序对用户输入的数据验证不到位造成的。攻击者在

    2024年04月28日
    浏览(41)
  • 【网络安全】SQL注入漏洞的修复建议

    SQL注入是Web应用程序常见的安全漏洞之一,攻击者通过恶意构造的SQL查询语句,成功在应用程序的数据库中执行任意操作,导致数据泄露、篡改或其他安全问题。 本篇技术博客将详细介绍SQL注入漏洞的修复建议,包括过滤危险字符和使用预编译语句,通过具体的代码案例帮助

    2024年02月06日
    浏览(52)
  • 网络安全B模块(笔记详解)- SQL注入

    1.使用渗透机场景kali中工具扫描服务器场景,将apache的端口号和版本号作为Flag提交(格式:端口号_版本号)  Flag:8081_7.5 2.使用渗透机场景windows7访问服务器场景SQL网站,并将网站中概述页面中的Flag提交; Flag:sql_is_good 3.使用渗透机场景windows7访问服务器中的SQL网站中的数

    2024年01月20日
    浏览(48)
  • 网络安全进阶学习第九课——SQL注入介绍

    将 不受信任 的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在 没有适当授权 的情况下执行非预期命令或访问数据。 注入能导致 数据丢失、破坏 或 泄露给无授权方 ,缺乏可审

    2024年02月14日
    浏览(45)
  • SQL注入 ❤ ~~~ 网络空间安全及计算机领域常见英语单词及短语——网络安全(二)

    就比如登录页面,输入用户名admin和密码123456,网页告诉服务器我的用户名和密码,服务器就会去问数据库,有没有这个用户名admin并且密码为123456的用户,服务器收到数据库的回答就回去告诉网页,有这个用户就登录成功,没有就登录失败。SQL注入就是在网页告诉服务器我的

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包