`
ultrang
  • 浏览: 59287 次
  • 性别: 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表达式作为排序字段的,也需要另外考虑。

分享到:
评论

相关推荐

    mybatis如何防止SQL注入

    然而,由于需要手动编写SQL语句,如果不加以防范,则可能会面临SQL注入的风险。 #### MyBatis防止SQL注入的方法 ##### 1. 使用预编译语句(PreparedStatement) MyBatis内部使用了JDBC的PreparedStatement来实现...

    DB2数据库SQL注入语句

    本文将深入探讨DB2数据库中的SQL注入语句,以及如何通过这些语句来猜解数据库结构和数据。 首先,SQL注入的基础原理是通过在合法的SQL查询语句中嵌入恶意代码,以改变原本的查询逻辑。在给定的示例中,攻击者试图猜...

    手工注入常用SQL语句.txt

    手工SQL注入通常涉及利用已知漏洞,通过精心构造的SQL语句来探测数据库结构和数据。 ### 2. Access数据库的手工SQL注入示例 对于Access数据库,可以通过以下方式进行手工SQL注入: - `and (select id from ...

    sql注入讲解ppt.pptx

    SQL 注入基础知识点总结 SQL 注入是指 web 应用程序对用户...通过学习 SQL 注入基础知识、工具和环境搭建、MySQL 数据库基础知识、SQL 注入防御、SQL 注入类型和基本步骤,我们可以更好地理解和防御 SQL 注入攻击。

    Go语言中使用gorm小结

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

    易语言动态拼接sql语句

    总结,易语言动态拼接SQL语句是其数据库操作中的重要组成部分,通过理解动态拼接的原理,注意安全问题,以及熟练运用易语言提供的数据库操作命令,我们可以构建出高效且安全的数据库应用程序。在实际项目中,应结合...

    DVWA之SQL注入详解(包含知识点)

    例如,了解了SQL语句中的"ORDER BY"子句,它用于对查询结果进行排序。"ORDER BY 1"意味着按照第一个字段排序,"ORDER BY 2"则按照第二个字段排序。此外,还学到了SQL语句中"@"和"@@"符号的区别,前者表示局部变量,...

    SQL注入之如何检测与判断详细过程

    3. **注释符应用**:使用注释符(`--`, `#`, `--+`)对SQL语句进行注释,以确保后半部分不被执行,从而避免被WAF拦截。 - 注释符后需加上空格或URL编码后的空格(`%20`)。 4. **ORDER BY字段数判断**:使用ORDER ...

    Python使用sql语句对mysql数据库多条件模糊查询.pdf

    sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc " ``` 在上面的代码中,我们首先构建了一个基本的 SQL 语句,然后根据条件添加过滤条件。 执行 SQL 语句 执行 SQL 语句...

    SQL注入 如何防止SQL注入

    SQL注入攻击是一种常见的Web应用安全漏洞,攻击者通过向Web应用程序提交恶意的SQL代码,以达到非法访问或控制数据库的目的。为了防止SQL注入攻击,需要了解攻击的机理和防护方法。 1. SQL注入攻击机理: SQL注入...

    SQL手工注入学习机

    手工注入时,需要逐步构造SQL语句,例如通过使用ORDER BY、LIMIT、UNION SELECT等方法来测试列数,或者使用ASCII值或HEX转换来猜测字符。在获取了足够的信息后,可以尝试提取数据,甚至控制数据库服务器。 安全编码...

    sql注入漏洞学习

    SQL注入漏洞是Web应用开发中的严重安全问题,它允许攻击者通过输入恶意的SQL语句来操纵数据库。这种漏洞通常是由于编程错误导致的,即应用程序没有有效地验证或转义用户提供的输入,使得这些输入能够与数据库查询...

    啊D注入工具中使用的SQL注入语句-1.txt

    根据提供的文件信息,我们可以分析出该文档主要涉及的是SQL注入技术的具体应用实例,特别是通过啊D注入工具进行的SQL注入尝试。以下是对这些SQL注入语句的详细解析: ### SQL注入基础概念 在深入分析之前,我们...

    MyBatis 3 _ SQL 语句构建器1

    在 `selectPersonSql()` 方法中,可以看到这种风格的使用,它将原始的 SQL 语句拆分成各个部分,如 SELECT、FROM、INNER_JOIN、WHERE、GROUP_BY、HAVING 和 ORDER_BY,每个部分都对应一个方法调用,使得代码更清晰...

    程序结合SQL语句结构,动态实现SQL多条件查询语句代码

    总之,动态生成SQL多条件查询语句是程序开发中的常见需求,通过理解和利用SQL语句结构,我们可以构建出高效、灵活的查询机制。在实际应用中,还需要结合具体数据库系统的特点,以及业务需求,进行适当的调整和优化。

    sql注入之数字型注入

    SQL 注入之数字型注入是一种常见的 Web 应用安全漏洞,攻击者可以通过构造恶意输入来inject恶意 SQL 语句,访问或修改数据库中的敏感信息。本文将详细介绍数字型注入的概念、原理、检测方法和防御措施。 一、数字型...

    sql语句封装

    这些方法可以帮助程序员避免拼写错误,同时通过参数化查询来防止SQL注入攻击,这是一种常见的安全威胁。 `CmdBuilder.cpp`文件很可能是实现`CmdBuilder`类功能的源代码,包含了类的方法定义以及可能的实现细节,...

    php中mysql数据库的sql注入与全面防范

    这将导致 SQL 语句变为「SELECT * FROM users WHERE username LIKE ‘%aabb%’ or 1=1 order by id# ORDER BY username」,从而返回所有用户信息。 2. UPDATE 语句注入 例如,攻击者可以在更新用户信息时输入恶意...

    基础常用SQL语句.pdf

    本文档总结了基础常用的SQL语句,涵盖了MYSQL基础语句、数据库创建、数据表创建、数据插入、查询、更新、删除、子句、连接、NULL值处理、正则表达式、ALTER命令、服务器元数据、MYSQL及SQL注入、MYSQL导出数据等多个...

Global site tag (gtag.js) - Google Analytics