问题:如果对这两个参数(我暂且称为sortName,sortType)没有进行有效的控制,就可能导致脚本注入。泄漏数据库的信息。例如:
sortName="xxxName"; sortType="ASC ,if(116<115),1,(select 1 from information_schema.tables))";
解决方案:我们可以对sortType进行限制,必须是ASC或者DESC.另外,还要对sortName也进行限制,因为当sortType为空字符串时,可能通过sortName也能注入成功。对于sortName的限制策略有多种:1.可以判断这个值是不是数据库的某个字段名;2也可以通过字符串长度进行限制,例如限制在20个字符内等。
备注:上面提到的方式对于多重排序字段的请求不兼容,需要另外考虑其他设计,例如设计成数组来存储排序列和排序方式。同时,对于有些DBMS可以将SQL表达式作为排序字段的,也需要另外考虑。