zoukankan      html  css  js  c++  java
  • Mybatis下的sql注入

    以前只知道mybatis框架下,order by后面接的是列名是不能用#{},这样不起效果,只能用${},这样的话就可能产生sql注入。后来发现其实还有另外两种情况也是类似的:

    1.order by ${} asc

    像这种情况最好的办法是在java层面上做映射,比如说用户只能输入1-5,然后在代码层面将其映射为字段名,然后再使用${}

    2.

    Select * from news where id in (#{id})  这样写会报错

    防范方法:使用mybatis自带的循环指令

    select * from news where id in

    <foreach collection="ids" item="item" open="("separator="," close=")">#{item} </foreach>

    3.模糊查询

    Select * from news where title like ‘%#{title}%’, 这样写会报错

    方法方法:  select * from news where tile like concat(‘%’,#{title}, ‘%’)

    4.

    mybatis 需要注意的一个有意思的地方
    看是否有自己造轮子的addCriterion()第一个参数时condition,观察是否有字符串拼凑,模糊查询的地方容易出问题

    ----------------------------2019.4.1------------------------

    补充一下这个可能是mysql的问题,java使用原生的jdbc也有这样的问题,php也是

    -----------------------2019.11.7----------------------

    php使用PDO依然可能存在sql注入的三种情况

    1.sql语句依然使用字符串拼凑,导致PDO

    2.预编译的变量名可以修改

    $dbh=new PDO('mysql:host=localhost;dbname=test_data','root','');
    $sql="SELECT * FROM `users` WHERE `id`=:".$_GET['id'];
    $sth=$dbh->prepare($sql);
    $sth->execute(array(":id"=>1));
    3.本地模拟预编,依然可能存在宽子节注入
    正确做法是:$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  • 相关阅读:
    html5---音频视频基础一
    SQL--数据库性能优化详解
    微信--入门开发
    MVC----基础
    jquery -----简单分页
    sql优化
    集合的总结
    java并发编程与高并发解决方案
    java中boolean类型占几个字节
    正则表达式小结
  • 原文地址:https://www.cnblogs.com/jinqi520/p/10083751.html
Copyright © 2011-2022 走看看