[发明专利]一种构造SQL语句的方法及装置有效
申请号: | 200810185117.6 | 申请日: | 2008-12-09 |
公开(公告)号: | CN101425117A | 公开(公告)日: | 2009-05-06 |
发明(设计)人: | 林耀纳 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F21/22 | 分类号: | G06F21/22;G06F17/30 |
代理公司: | 北京集佳知识产权代理有限公司 | 代理人: | 马 敬;逯长明 |
地址: | 英属开曼群岛大开曼*** | 国省代码: | 开曼群岛;KY |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 构造 sql 语句 方法 装置 | ||
技术领域
本发明涉及软件技术领域,特别是指一种构造结构化查询语言(SQL,Structure Query Language)语句的方法及装置。
背景技术
结构化查询语言(SQL,Structure Query Language)是一种面向数据库的通用数据处理语言规范。SQL注入攻击是指攻击者利用现有系统程序中对用户输入的数据进行特殊字符过滤不完整的缺陷,将恶意的SQL命令注入到服务器数据库引擎执行,达到窃取数据甚至控制服务器目的。
SQL注入可存在于任何利用后台数据库的系统程序中,最常见的有PHP/JSP/ASP等Web系统程序。Web系统程序是一种采用超文本传输协议(HTTP,Hypertext Transfer Protocol)实现客户端和服务器之间通信的应用模式。
单引号,作为SQL语句中字符串的定界符,属于特殊字符。包含单引号的SQL语句不能直接正常执行,需要对其中的单引号进行转义操作,即将单引号替换为反斜杆单引号(/′)。
例如,查询数据表(table)中字段(field)为U的数据,构造的SQL语句应该为:SELECT*FROM table WHERE field=′U′。对其中的单引号进行转义操作后得到SELECT*FROM table WHERE field=/′U/′,以使SQL语句能够正确的被执行。
而当U中数据被恶意构造并含有单引号时,如单引号中的数据U被恶意构造为hz′cn时,SQL语句为:SELECT*FROM table WHERE field=′hz′cn′。由于单引号内的数据还存在单引号,系统无法识别单引号内的数据到底是hz、cn还是hz’cn。这时,对其中的单引号进行转义操作后会得到/′hz/′cn/′。
通常,系统会默认识别第一对单引号中的内容,即将hz识别为单引号中的数据,而cn被认为是一对单引号(即′hz′)之后的数据,同时还会认为cn后的单引号是一个不完整的单引号,进而导致SQL执行失败。攻击者则利用 这种错误将攻击语句并在cn的单引号之后,例如,被修改后语句可以是SELECT*FROM table WHERE field=′hz′cn′main′,这样即可实现SQL注入。也就是说,利用SQL语句的错误,加入攻击者所要加入的内容,从而实现注入攻击。可见,SQL注入的根源是系统程序中使用了用户输入数据来构造动态的SQL语句。
目前,当用户提交数据后,系统程序在获取用户提交的数据时,会统一对所有变量进行安全过滤即初始化时的过滤,目的是使变量能安全的在SQL语句中使用。但是,由于这种初始化过滤是在获取用户提交数据后立即进行,而系统对用户提交的数据过滤后,生成SQL语句之前,还会对过滤后的数据进行一些中间操作如转义操作、查询操作等,而这些操作正是不可控的。因而,无法保证在系统程序初始化过滤之后,系统程序在执行过程中不被恶意构造,以至于无法保证所生成的SQL语句不是被恶意构造的。
发明内容
本发明实施例的目的在于提供一种构造SQL语句的方法及装置,以解决在系统程序执行过程中可能存在的安全隐患,保证所生成的SQL语句是安全的。
本发明实施例提供了一种构造SQL语句的方法,包括:
获取用于构造SQL语句的信息,从所述信息中查找出所有变量,将除所述变量外的其他用于构造SQL语句的信息全部加上单引号;
对所述所有变量进行过滤操作,过滤操作通过后,将所述变量以及所述单引号内除变量外其他用于构造SQL语句的信息合在一起,生成SQL语句。
其中,如果所述用于构造SQL语句的信息是针对查询和/或删除类型的SQL语句的信息,则所述所有变量至少包括以下其中之一或任意组合:第一类变量、第二类变量、第三类变量、第四类变量;
其中,所述对所有变量进行过滤的操作包括:
从所述所有变量中找出属于第一类的变量,若所述第一类变量在预先给定的范围值内,所述第一类变量通过过滤操作;
从所述所有变量中找出属于第二类的变量,对所述第二类变量按照第一过滤规则进行过滤,过滤完毕后,所述第二类变量通过过滤操作;
从所述所有变量中找出属于第三类的变量,将所述第三类的变量全部强制转换成整数型类型,转换完毕后,所述第三类变量通过过滤操作;
从所述所有变量中找出属于第四类的变量,将所述第四类型的变量全部放入一个数组中,对所述数组中的变量按照第一过滤规则进行过滤,将过滤后的变量用逗号连接,过滤完毕后,所述第四类变量通过过滤操作;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810185117.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种计算机用硬盘数据的物理销毁方法
- 下一篇:计算布线长度的方法