大苹果xoxo 2020-02-06 14:01 采纳率: 0%
浏览 853
已结题

Fortify检测sql注入问题 order by动态拼接注入漏洞

java服务,使用spring jdbc做持久化层,数据库使用oracle,在做分页sql拼接的代码被Fortify检测出来问题,甲方要求必须整改。
检测代码源如下:

private static String getPagerSql(String sourceSql, Pager<Map<String, Object>> pager) {
        StringBuffer toSql = new StringBuffer();
        toSql.append("select * from ( select row_.*, rownum rownum_ from ( ");
        toSql.append(sourceSql);
        toSql.append(" order by ");
        for (Sort orderBy : pager.getSort()) {
            toSql.append(String.format("%s %s,", orderBy.getProperty(), orderBy.getDir()));
        }
        toSql.deleteCharAt(toSql.length() - 1);
        toSql.append(" ) row_ ) where rownum_ > ? and rownum_ <= ? ");
        return toSql.toString();
    }

主要问题是在动态拼接排序参数被检测出来问题,虽然排序参数做了排序字段和排序顺序过滤,但还是被检测出高危注入漏洞,代码如下:

    /**
     * 获取排序参数
     * @return
     */
    public List<Sort> getSort() {
        String[] sortnames=this.getSortname().split(",");
        String[] sortordes=this.getSortorder().split(",");
        if(sortnames.length!=sortordes.length) {
            throw new IllegalArgumentException("分页多重排序参数中,排序字段与排序方向的个数不相等");
        }
        String regex = "^[a-z0-9A-Z_]{1,20}";
        for(String sortname:sortnames) {
            if(!sortname.matches(regex)) {
                throw new IllegalArgumentException("分页排序参数中,排序字段非法");
            }
        }
        List<Sort> orders = new ArrayList<Sort>();
        for (int i = 0; i < sortnames.length; i++) {
            if(!(Sort.ASC.equals(sortordes[i].toLowerCase())||Sort.DESC.equals(sortordes[i].toLowerCase()))) {
                throw new IllegalArgumentException("分页排序参数中,排序方向非法");
            }
            orders.add(new Sort(sortnames[i], sortordes[i]));
        }
        return orders;
    }

请问有什么办法解决这个被Fortify检测出来的漏洞
图片说明

  • 写回答

2条回答 默认 最新

  • dabocaiqq 2020-02-06 15:01
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群