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检测出来的漏洞
图片说明

https://blog.csdn.net/arkqyo2595/article/details/101105174

sql注入一般要考虑参数绑定的方式避免,sourceSql传入的这个语句是否包含类似拼接字符串(如name = '"+ inputname + "'),需要换成参数绑定的形式,可以参考下
https://www.cnblogs.com/aishangJava/p/9734878.html