`
ultrang
  • 浏览: 57933 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

防止通过ORDER BY 进行SQL语句注入

阅读更多
背景:一般MIS系统的开发中,都会给表格设计一个题头进行排序的功能。具体的实现是将SQL语句中的ORDER BY 字句的两个参数:排序字段、排序方式作为对象的属性,由前台提交到后台。


问题:如果对这两个参数(我暂且称为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表达式作为排序字段的,也需要另外考虑。

分享到:
评论

相关推荐

    Go语言中使用gorm小结

    防止直接拼接sql语句引入sql注入漏洞 方便对modle进行统一管理 专注业务,加速开发 坏处也是显而易见的: 开发者与最终的sql语句隔了一层orm,因此可能会不慎引入烂sql 依赖于orm的成熟度,无法进行一些「复杂」...

    网络安全原理与应用:SQL手工注入.pptx

    SQL手工注入一、SQL手工注入知识点任务通过SQL手工注入的方法获取admin的密码1、检查是否存在注入点2、猜解SQL查询语句的字段数3、获取数据库名称4、获取数据表名5、获取字段名6、获取字段数据SQL手工注入二、SQL...

    计算机病毒与防护:MYSQL联合查询上.ppt

    SQL的union查询 联合查询注入原理-SQL的union查询 联合查询注入原理-SQL的union查询 联合查询注入原理-判断原有查询语句的列数 判断原有查询语句的列数通常基于布尔型盲注的思想来进行,通常使用order by 语句来...

    Web应用安全:使用SQL注入攻击篡改数据实验.doc

    用order by 语句查询有多少列字段,16报错 15显示正常页面 PS:说明网页注入字段长为15 用不存在的参数显示出回显位置为3,7,8,9,11,12,14 PS:判断出网页回显信息的位置,以便获取注入语句执行后返回的信息 ...

    Mybatis现学现用

    这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出...

    C#调用SQL语句时乘号的用法

    一般来说,在ADO中,我们需要在SQL语句中使用乘法运算,可是添加’*’以后执行程序总是会出错,这是因为‘*’与sql中的‘*’关键字重合了,因此编译就会出错。 解决办法为:将乘法运算放到sql语句外面,将结果放入一...

    SQL查询安全性及性能优化

    说明:通过这个报表找到排在前10 的sql语句,如果这些语句是用户编写的sql语句,我可以对其进行优化。 我们可以根据这些信息筛选出需要优化的SQL语句进行优化 SQL优化经验  大表缺索引---必要字段上建立索引  ...

    程序员的SQL金典.rar

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    程序员的SQL金典4-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    ecshop常见漏洞

    ecshop的/admin/comment_manage.php中,对输入参数sort_by、sort_order未进行严格过滤,导致SQL注入;ECShop存在一个盲注漏洞,问题存在于/api/client/api.php文件中,提交特制的恶意POST请求可进行SQL注入攻击,可...

    程序员的SQL金典6-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    程序员的SQL金典7-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    程序员的SQL金典3-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    MyBatis 需要注意的地方junit注解

    2.mapper.xml:编辑需要执行的sql语句 (1)mapper标签的namespace属性:指定该xml对应的dao层接口的路径 3.spring-mybatis.xml:spring集成mybatils的配置文件 (1)配置sqlSessionFactory指定要操作的数据库,...

    mysql中 ${param}与#{param}使用区别

    ${param}传递的参数会被当成sql语句中的一部分,比如传递表名,字段名 例子:(传入值为id) order by ${param}  则解析成的sql为: order by id #{parm}传入的数据都当成一个字符串,会对自动传入的数据加一个双...

    数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT 1 来查询 SELECT * FROM table1 WHERE id=(SELECT id FROM table1 ORDER BY rand() LIMIT 1)...

    数据库和ado知识

    使用SQL语句来创建数据库和表 约束分类 top的使用 Distinct的使用(去除重复数) 聚合函数 聚合函数注意事项 between and 和 in 的使用 like, not like 通配符(%,_,[],^) 空值处理:null 是什么? 排序(order by id ...

    SQLite参考手册.CHM

    教程,安装,命令,语法,数据类型,创建数据库,附加数据库,分离数据库,创建表,删除表,insert语句,select语句,运算符,表达式,where子句,and/or运算符,update子句,like, group,limit, order by, having ...

    jdbc基础和参考

    创建时不需要传递sql语句,但是执行时需要传递sql语句 2.如果涉及到动态参数的传递,必须使用字符串拼接 PreparedStatement: 1.创建时就需要传递sql语句,执行的时候不需要传递sql语句 2.如果涉及到动态参数...

    SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)

    (一)行号显示和排序 1.SQL Server的行号 A.SQL 2000使用identity(int,1,1)和临时表,可以显示行号 SELECT identity(int,1,1) AS ROWNUM, [DataID] INTO #1 FROM DATAS order by DataID; SELECT * FROM #1 B.SQL ...

Global site tag (gtag.js) - Google Analytics