浅析SQL注入的攻击原理以及防御建议

来源 :人间 | 被引量 : 0次 | 上传用户:yuanjian2009
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文旨在阐述SQL注入的攻击原理,并提出相应的防御建议,本文以示例代码说明SQL注入的基本原理,并简述其危害,最后提出了SQL注入攻击防御的基本方法,从而有效地避免SQL注入攻击。
  关键词:SQL注入;字符过滤;SQL参数化查询
  中图分类号:TP393.08文献标识码:A文章编号:1671-864X(2015)07-0129-02
  一、概述
  随着科学技术的不断发展以及互联网络的广泛应用,使用信息化处理技术来实现数据信息的数字化、网络化管理已经成为现代社会各个领域中的发展趋势。基于B/S架构的web系统以其方便、快捷、多平台支持的特性,已经成为目前流行的计算机系统。然而,互联网络的开放性与共享性,加上编码人员的安全编码意识较低或信息安全技术较为薄弱,当前的web系统出现了各种各样的安全漏洞,给网络黑客和恶意攻击人员以可乘之机。根据国际免费组中OWASP历年来统计的安全漏洞来看,SQL注入一直是位于应用安全漏洞top10 的榜首,时时刻刻威胁着各个信息化系统的广泛应用。如果一个信息系统存在SQL注入的安全漏洞,一旦被黑客恶意利用,将会为信息系统造成不可预估的损失,也会为系统运营商,无论是在对外形象上还是经济上,都会造成极大的影响。所以,对于SQL注入的基本攻击原理的研究以及对其防御技术的学习,对于提升信息系统的安全性、避免运营商的损失方面来说,具有非常重要的现实意义。
  二、SQL注入的攻击原理
  SQL注入(又被成为SQL Injection),是最常见的web系统或其他应用系统的安全漏洞,也是很容易被网络恶意攻击者利用,并且对应用系统的后台数据造成极大破坏的一种攻击方式。
  大多数的应用系统,其核心思想是对后台数据库中存储的数据信息进行存储、读取、逻辑处理的过程,所有的原始数据或最终数据都是以格式化数据的形式,存储在特定的数据库中的数据表内。所以,在应用系统开发过程中,除了正常的按照业务逻辑和需求,对数据进行逻辑处理代码外,其他的一部分代码,就是对数据库数据进行存储、查询、修改的存储过程,一般为SQL语句形式的对数据库的数据表数据进行的处理过程。应用系统的开发,要求系统与最终用户之间有友好的交互,即应用系统按照用户的意愿,通过GUI界面或CLI命令行,读取用户的输入数据,然后通过相应的逻辑处理后,将用户数据传到后台的存储过程中,即将用户的 交互数据,形成SQL语句的一部分,最终构成完整的SQL语句传输到数据库管理系统完成数据表数据的操作。而SQL注入攻击,即是利用了这个正常的处理过程中存在的安全漏洞,实现对应用系统的安全攻击。
  对于缺乏安全编码意识或技术的开发人员来说,在获取到用户数据后,一般都是不做任何安全处理,直接传给SQL语句后,这就造成了SQL注入的安全漏洞,很容易让网络黑客通过渗透技术或网络攻击技术,侦查到该漏洞实施安全攻击。
  以基于GTK+编程为例,在以下代码中,就会存在SQL注入的安全漏洞。
  //SQL语句拼接
  strcpy(query,"select * from MyUsers where name = \"");
  strcpy(string,gtk_entry_get_text(GTK_ENTRY(entry1)));
  strcat(query,string);
  strcat(query,"\" and password =\" ");
  strcpy(string,gtk_entry_get_text(GTK_ENTRY(entry2)));
  strcat(query,string);
  strcat(query,,"\" ");
  //SQL语句查询
  if(mysql_query(mysql,query)){
  printf("mysql_query wrong!");
  mysql_close(mysql);
  exit(0);
  }
  在这段代码中,主要分为两个部分,第一部分为SQL语句拼接部分,即对用户输入的数据,通过相应的手段或方法,将其拼接成完整的SQL语句,第二部分为SQL语句查询,即将完成的SQL语句通过相应API传输到数据库管理系统后进行数据查询。在SQL语句拼接中,首先将“select * from MyUsers where name = "”字符串赋值给query变量,然后通过gtk_entry_get_text()方法,从前端GUI输入框中获取用户输入数据,赋值给string变量,然后将string变量字符串拼接到query后面,然后再次将“" and password =”拼接到query变量之后,然后再次通过gtk_entry_get_text()方法从GUI上获取另外一个数据,并赋值给string变量,最后再次拼接到query变量后面,形成一个完成的SQL语句。假如,用户在entry1中输入admin,在entry2中输入password,那么最终形成的SQL语句如下:
  select * from MyUsers where name = "admin" and password ="password"
  该语句实现的功能为从MyUsers数据表中查询name字段为admin,password字段为password的数据信息。在正常情况下,如果数据表中存在该数据,查询成功,如果不存在该数据,查询失败。
  而网络黑客如果检测到该系统存储SQL注入安全漏洞,就可以通过特定的攻击手段,来获取相应的信息。例如,在entry1中输入“test" or 1=1 —— ”,在entry2中输入任意值,如penetration,那么按照应用系统的正常处理过程,就形成了如下SQL语句:   select * from MyUsers where name = "test" or 1=1 ——and password ="penetration"
  在SQL语句中,“——”为注释符号,即该符号之后的代码全为注释代码,那么上述SQL语句变成如下语句:
  select * from MyUsers where name = "test" or 1=1
  该SQL语句的执行,是查询MyUsers表中在where条件下的所有数据信息,where条件中,name为test的可能不存在,信息为零,但or运算为或预算,后面的1=1是永远成立的,那么SQL语句执行时,where条件永远成立,那么查询的结果即是将MyUsers表中的所有信息全部查询出来。
  如果MyUsers数据表即为存储用户名和密码的用户表,那么该攻击将会获取该表内所有的数据信息。即使密码字段的采用加密算法加密,网络黑客也可以通过彩虹表对比或MD5解密等暴力破解方式,解密密码字段信息,从而获取登录名密码信息完成后续攻击。此外,如果该应用系统使用的数据库管理系统允许多SQL语句同时执行,则可以在select语句之后跟着drop语句或delet语句,从而对数据库的数据完整性造成破坏。这都对应用系统的正常运营造成极大的损失。
  三、SQL注入的防御建议
  SQL注入攻击手段,对应用系统造成的危害是最直接的,破坏也是最大的,所以在应用系统开发过程中,必须做好SQL注入攻击的防御措施,从而提升开发系统的安全等级,使系统长期安全稳定地运行。
  (一)字符过滤。
  字符过滤是主动防御的一种方式,即对用户的输入数据进行特殊字符过滤,或限制用户输入某些特殊字符。常见的特殊字符包括“——”注释符,“;”多命令运行符,“ ”空格符等,当用户如果这些字符后,通过将其前面添加转移字符,将其变成SQL语句的数据部分,并非作为SQL语句代码对数据进行查询。例如针对上述SQL注入例子,可以使用strstr函数,对query变量查询,看是否存在特殊字符,或者使用mysql_real_escape_string()函数,对其特殊字符进行过滤即可。
  (二)参数化查询。
  根据SQL数据库管理系统运行机制,如果在访问数据库时,插入的查询数据是一个参数,那么SQL编译器会首先对SQL语句进行编译,然后再将参数带入到SQL语句,这样参数内的数据信息将不会最为SQL指令到数据库管理系统中去执行,从而有效地避免特殊字符的执行。
  (三)安全数据加密。
  对敏感数据必须采用数据加密的方式对其进行处理,这是必须的,对于信息系统的安全性来说也是非常重要的。但是考虑到简单的加密很容易被暴力破解,所以在选择加密算法或者加密机制时,尽量选择安全级别高的加密方式或加密机制,进而有效地减少加密数据被暴力破解的可能性。例如,可以采用AES的加密算法或者三重DES的加密算法,都是对存储数据加密的相对安全性较高的加密方式。同时,对于密钥存储的方式,也需要尽量采取安全性高的方案,来提升数据加密的安全性。
  (四)强制增加密码复杂度。
  对于安全要求较高的系统,可以通过强制增加密码复杂度的方式,来提升密码安全性,减少被暴力破解的可能性。众所周知,密码越复杂,被非法解密的时间越长,非法解密的可能性越小,所以增加密码复杂度也是减少SQL注入的一种方法。例如,强制要求用户密码设置时,必须含有大写字母、小写字母、数字和特殊字符,长度不能小于10等等,这些设置都提高安全级别,减少SQL注入攻击危害的辅助方式。
  (五)渗透测试。
  当前,测试工作越来越被更多的公司所看重,渗透测试作为应用安全处测试的方式,对于应用安全来说,是非常直接的。渗透测试是按照网络白客或者专门的渗透测试团队,按照黑客的攻击思路和方式,对应用系统进行渗透测试,最后给出测试报告,提出修复方案。所以渗透测试,是在黑客在发现SQL注入漏洞之前,有效地对应用系统进行测试,从而发现SQL漏洞并及时修复,进而避免损失。
  四、总结
  SQL注入是危害较大的一种应用安全漏洞,是安全编码人员在缺少安全编码意识或技术的情况下,引入的安全漏洞。对于SQL注入攻击,只有很好地了解其基本原理,根据防御措施积极做好防御,就会避免SQL注入的发生。
  参考文献:
  [1]吴潇璇.SQL注入式攻击防范研究[J].阴山学刊(自然科学版).2015(04)
  [2]胡海斌.Web系统中SQL注入与攻击检测[J].福建电脑.2015(08)
其他文献
日本神钢电机公司向日本“森林乳业”神户工厂提供并安装小型风力和小型水力发电装置。小型风力装置为神钢曾在“爱知博览”中亮相的“微风君”。以普及型为例,2003年上市的立
摘要:本文主要研究当下趋于娱乐化的电视新闻,从其发展现状及未来反思等方面入手,表达了媒体人对新闻产业的期待。尤其是对媒体职责的强调和新闻价值的探索更是基于新闻业的历史和发展方向。随着我国改革开放,市场经济蓬勃发展,如何在强大的市场环境中稳步发展新闻业,是媒体应该反思的问题。  关键词:电视新闻;娱乐化;趋势  中图分类号:G212 文献标识码:A 文章编号:1671-864X(2015)08-01
在教学过程中,教师和学生都在不停探索新的学习方法,试图找到更适合信息传播、存储和记忆的好办法。在这个信息化时代,这种探索更是日新月异,从最初的投影教学再到PPT再到网络课
我厂送引风机电动机采用FR—F500L型变频器调速,曾发生几例变频器跳闸故障,现介绍如下。
日本荏原综合研究所正在开发采用磁浮电动机的防水泵。磁浮电动机有很多优点。首先它的旋转体由于完全不接触支承,故不会产生由摩耗引起的粉尘,应用于泵可使泵适合于清洁液体的
摘要:电影通过长镜头的拍摄手法,可以细腻地展现出影片最真实的背景和情感。侯孝贤所运用的长镜头,看似漫长但令人深思,观众能够在他的长镜头下感受到属于自己的那份情感。本文通过研究侯孝贤执导的几部经典作品,了解影片背后隐藏的时代背景和社会背景,更意在探讨侯孝贤电影对中国电影乃至世界电影的重要影响。  关键词:电影;长镜头;拍摄手法;侯孝贤  中图分类号:J922 文献标识码:A 文章编号:1671-86
我公司用于铝电解槽阴极炭块加工吊装的A571型电动单梁桥式起重机属地面按钮操作,额定起重量5t。工作中,频繁起、停操作,致使设备故障率高,特别是按钮触头因电弧灼伤,需经常修理或
《论语》是一部记录我国春秋时代的思想家、教育家孔子言行的书,内容涉及政治、教育、文学、哲学多方面。细细品读,发现其不但对个人人格的塑造、提升与完善具有根本的指导作用
目的:探究术后早期炎性肠梗阻的护理体会。方法:选取我院2013年4月-2014年5月收治的20例术后早期炎性肠梗阻患者(EPISBO),进行回顾性分析。结果:通过非手术治疗、精心护理,18例患
1 存在问题我公司有多台高压开关柜,当发生事故使断路器跳闸后,在故障没有被排除的情况下是不允许现场合闸的。如果误合闸,就可能引起严重的后果。原高压断路器分、合闸控制电路