对于sql注入怎么处理呢

来源:2-6 JDBC实战---搭建模型层 Ⅳ

qq_梦中虔诚_03693510

2016-08-03 14:15

通过StringBulider拼接SQL语句,这样的写法,对于sql注入怎么处理呢

写回答 关注

3回答

  • Airly
    2016-11-13 16:01:44

    对 于 JDBC而言, SQL注入 攻 击 只 对 Statement有效, 对 PreparedStatement 是无效的, 这 是因 为 PreparedStatement 不允 许 在不同的插入 时间 改 变查询 的 逻辑结 构。  
    如 验证 用 户 是否存在的 SQL语 句 为 :  
    select count(*) from usertable where name='用 户 名 ' and pswd='密 码 '
    如果在 用 户 名字段 中 输 入 ' or '1'='1' or '1'='1
    或是在 密 码 字段 中 输 入 1' or '1'='1
    将 绕过验证 ,但 这种 手段只 对 只 对 Statement有效, 对 PreparedStatement 无效。  
    PreparedStatement 相 对 Statement有以下 优 点:  
    1.防注入攻击  
    2.多次运行速度快  
    3.防止数据库缓冲区溢出  
    4.代 码 的可读性可维护性好


    ------------------------参数过滤器----------------------------

    2-6里面讲了类似参数过滤器的概念

    DAO类:

    StringBuilder sb = new StringBuilder();

    sb.append(" select * from goddess where 1=1");

    sb.append(" and "+map.get("name")+" "+map.get("rela")+" "+map.get("value"));

    【注释:该语句为 查询什么(name),关系是什么(rela),值是什么(value)】

    PreparedStatement ptmt = conn.prepareStatement(sb.toString());

    -------------

    ACTION类:

    param.put("name", "user_name");

    param.put("rela", "=");

    param.put("value", "'小美'");

    params.add(param);

    List<Goddess> result = g.query(params);


  • qq_梦中虔诚_03693510
    2016-08-04 17:31:16

    不好意思,你指的是sql语句中有占位符?的那种,这个我知道,但在JDBC之对面的女孩看过来2-6中,并没有用到占位符?,而是把参数直接拼装到了sql语句,所以有此疑问,如果要添加个参数过滤器,又该怎么添加

  • qq_朗_0
    2016-08-03 23:34:10

    StringBuilder 拼接成sql语句 然后预处理时候传参,将StringBuilder的字符串参数传入就可以了

JDBC之 “ 对岸的女孩看过来”

一起领略JDBC的奥秘,为进一步学习集成框架打下良好的基础

99327 学习 · 856 问题

查看课程

相似问题