• SQL或HQL预编译语句,可以防止SQL注入,可是不能处理%和_特殊字符


    近期项目在做整改,将全部DAO层的直接拼接SQL字符串的代码,转换成使用预编译语句的方式。个人通过写dao层的单元測试,有下面几点收获。

    dao层代码例如以下

    //使用了预编译sql
    public List<IndvConfigModel> selectConfigBySuffix(String suffix)
    {
            String hql = "from IndvConfigModel where configKey like '%'||?||'%'";
    
            return this.selectConfigByHQL(hql, new Object[]{suffix});
    }


    单元測试代码和运行结果例如以下:

    @Test
    public void testLike()
    {
        List<IndvConfigModel> list = dao.selectConfigBySuffix("picQual");
        Assert.assertEquals(list.size(), 2);// 1.true
    
        list = dao.selectConfigBySuffix("picQua%");
        Assert.assertEquals(list.size(), 2);// 2.true
        
        list = dao.selectConfigBySuffix("pic'Qual");
        Assert.assertEquals(list.size(), 0);//3. true
    
    }

    1、第一个断言是true,说明上面的做法,的确可以起到模糊查询的效果 
     
    2、第二个断言是true。说明%被觉得是模糊匹配,并没有被oracle看成普通的字符。这说明预编译语句。是不能处理參数值中的特殊字符的。遇到%和_这样的数据库模糊查询的特殊字符,须要使用者自己转义.
     
     
    3、第三个断言没有报异常。说明:预编译语句已经对oracle的特殊字符单引號。进行了转义。即将单引號视为查询内容。而不是字符串的分界符。


     
    因为SQL注入事实上就是借助于特殊字符单引號。生成or 1= 1这样的格式的sql。预编译已经对单引號进行了处理,所以能够防止SQL注入

  • 相关阅读:
    5.15、tomcat下部署JPress
    27、Tomcat服务的安装与配置
    11、gitlab和Jenkins整合(2)
    11、gitlab和Jenkins整合(1)
    K-medodis聚类算法MATLAB
    K-modes聚类算法MATLAB
    K-means聚类算法MATLAB
    Andrew Ng机器学习总结(自用)
    Andrew Ng机器学习编程作业:Anomaly Detection and Recommender Systems
    Andrew Ng机器学习编程作业:K-means Clustering and Principal Component Analysis
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7228160.html
Copyright © 2020-2023  润新知