背景:一般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表达式作为排序字段的,也需要另外考虑。
分享到:
相关推荐
防止直接拼接sql语句引入sql注入漏洞 方便对modle进行统一管理 专注业务,加速开发 坏处也是显而易见的: 开发者与最终的sql语句隔了一层orm,因此可能会不慎引入烂sql 依赖于orm的成熟度,无法进行一些「复杂」...
SQL手工注入一、SQL手工注入知识点任务通过SQL手工注入的方法获取admin的密码1、检查是否存在注入点2、猜解SQL查询语句的字段数3、获取数据库名称4、获取数据表名5、获取字段名6、获取字段数据SQL手工注入二、SQL...
SQL的union查询 联合查询注入原理-SQL的union查询 联合查询注入原理-SQL的union查询 联合查询注入原理-判断原有查询语句的列数 判断原有查询语句的列数通常基于布尔型盲注的思想来进行,通常使用order by 语句来...
用order by 语句查询有多少列字段,16报错 15显示正常页面 PS:说明网页注入字段长为15 用不存在的参数显示出回显位置为3,7,8,9,11,12,14 PS:判断出网页回显信息的位置,以便获取注入语句执行后返回的信息 ...
这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出...
一般来说,在ADO中,我们需要在SQL语句中使用乘法运算,可是添加’*’以后执行程序总是会出错,这是因为‘*’与sql中的‘*’关键字重合了,因此编译就会出错。 解决办法为:将乘法运算放到sql语句外面,将结果放入一...
说明:通过这个报表找到排在前10 的sql语句,如果这些语句是用户编写的sql语句,我可以对其进行优化。 我们可以根据这些信息筛选出需要优化的SQL语句进行优化 SQL优化经验 大表缺索引---必要字段上建立索引 ...
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章 ...
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的/admin/comment_manage.php中,对输入参数sort_by、sort_order未进行严格过滤,导致SQL注入;ECShop存在一个盲注漏洞,问题存在于/api/client/api.php文件中,提交特制的恶意POST请求可进行SQL注入攻击,可...
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章 ...
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章 ...
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章 ...
2.mapper.xml:编辑需要执行的sql语句 (1)mapper标签的namespace属性:指定该xml对应的dao层接口的路径 3.spring-mybatis.xml:spring集成mybatils的配置文件 (1)配置sqlSessionFactory指定要操作的数据库,...
${param}传递的参数会被当成sql语句中的一部分,比如传递表名,字段名 例子:(传入值为id) order by ${param} 则解析成的sql为: order by id #{parm}传入的数据都当成一个字符串,会对自动传入的数据加一个双...
MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT 1 来查询 SELECT * FROM table1 WHERE id=(SELECT id FROM table1 ORDER BY rand() LIMIT 1)...
使用SQL语句来创建数据库和表 约束分类 top的使用 Distinct的使用(去除重复数) 聚合函数 聚合函数注意事项 between and 和 in 的使用 like, not like 通配符(%,_,[],^) 空值处理:null 是什么? 排序(order by id ...
教程,安装,命令,语法,数据类型,创建数据库,附加数据库,分离数据库,创建表,删除表,insert语句,select语句,运算符,表达式,where子句,and/or运算符,update子句,like, group,limit, order by, having ...
创建时不需要传递sql语句,但是执行时需要传递sql语句 2.如果涉及到动态参数的传递,必须使用字符串拼接 PreparedStatement: 1.创建时就需要传递sql语句,执行的时候不需要传递sql语句 2.如果涉及到动态参数...
(一)行号显示和排序 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 ...