美文网首页
关于sql注入.....

关于sql注入.....

作者: 悠悠神代不曾闻 | 来源:发表于2017-01-25 17:18 被阅读11次

    前台传来的值如果不经过处理直接进入数据库执行的话,有很大的风险,例如,有人恶意传值 ’;drop table xxxx--的话,xxxx这张表直接就没了。
    下面举一个危害不大的例子:

    select * from user_table where username=''and password= ''
    假设我们在前端的user框里面输入'or 1=1--的话,这句sql就会变成
    select * from user_table where username='' or 1=1--'and password= ''
    

    这样密码无论输入什么都能登录成功了
    注:在数据库里面--是注释的意思,也就是说后面的and password= ''等于没有


    所有前台传来的值都得用prepare statement进行预处理。
    对于一个name对应一个值的情况,直接获取值放进List,举例如下:

    List<Object> paraList = new ArrayList<Object>()
    String counter = map.get("counter") == null ? "" : map.get("counter").toString();
    //再在sql的结尾加上
    if (!counter.isEmpty()) {
                builder.append("\n                    and s.code = ?");
                paraList.add(counter);
            }
    //return的时候带上paraList.toArray()
    return getJdbcTemplate().queryForInt(builder.toString(), paraList.toArray());
    

    对于前台一个name对应多个值的情况参考下面这篇文章
    根据前台传值的数量动态插入?,?..

    相关文章

      网友评论

          本文标题:关于sql注入.....

          本文链接:https://www.haomeiwen.com/subject/ogotittx.html