PHP下SQL注入攻击与防范

来源 :现代职业教育·高职高专 | 被引量 : 0次 | 上传用户:lina452995
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
   [摘要]“没有网络安全就没有国家安全”,网络安全的核心是保护网络可共享资源的安全。SQL注入攻击是最常见的一种网络安全问题,被OWASP列为“十大Web应用系统安全威胁之首”。以DVWA渗透测试平台,以PHP+Mysql环境为例,介绍SQL注入攻击的过程和基本原理,最后给出安全防范措施,为防御SQL注入攻击提供一些方法和手段。虽以PHP环境为例,但对其他编程语言开发的Web程序也有借鉴意义。
   [关键词]网络安全;Web安全;SQL注入;防范措施
   [中图分类号]TP393
   [文献标志码]A
   [文章编号]2096-0603(2019)07-0036-02
  在“互联网+”时代,越来越多的服务在网上完成,越来越多的系统是基于互联网的Web系统,而其中绝大多数系统需要后台数据库支持,数据库中数据的安全问题则成为重点关注的问题。SQL注入是最常见的一种数据库安全漏洞,被0WASP(开放式Web应用程序安全项目)列为“十大Web应用系统安全威胁之首”。
  一、SQL注入基本原理
  (一)SQL注入攻击的定义
  结构化查询语言简称SQL语言,是一种专门用于关系型数据库的编程语言。SQL注入攻击主要有两种形式,一种是将恶意代码嵌入在正常的SQL语句中,传递到后台数据库服务器执行,这种攻击被称为“直接攻击”或“一阶SQL注入”。另一种是事先将恶意代码保存到数据库,在攻击者第二次请求时响应并攻擊数据库,这种攻击称为“间接攻击”或“二阶SQL注入”。SQL注入具有如下的特性:
  (1)广泛性:任何一个基于SQL语言的数据库都可能被攻击,很多开发人员在编写Web应用程序时未对从输入参数、Web表单、cookie等接受到的值进行规范性验证和检测,通常会出现SQL注入漏洞。
  (2)隐蔽性:SQL注入语句一般都嵌人在普通的HTTP请求中,很难与正常语句区分开,所以当前许多防火墙都无法识别予以警告,而且SQL注入变种极多,攻击者可以调整攻击的参数,所以使用传统的方法防御SQL注入效果非常不理想。
  (3)危害大:攻击者通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对网站用户的数据安全有极大的威胁。攻击者也可以通过获取到的数据,得到后台管理员的密码,然后对网页页面进行恶意篡改。这样不仅对数据库信息安全造成严重威胁,对整个数据库系统安全也影响重大。
  (4)操作方便:互联网上有很多SQL注入工具,简单易学,攻击过程简单,不需要专业知识也能自如运用。
  (二)案例演示
  下面使用DVWA(Damn Vulnerable W eb Application)演示SQL注入过程,系统环境为PHP+Mysql。
  1.正常输入
  我们先进行一次正常查询,在BH框中输入1,预期显示BH为1的用户信息,如图1所示。查看源码为:$querySQL=“select*from tab_user where bh={$bh}”,构造语句为:“select * from tab_userwherebh=1”。这是正常输入,输出的结果与预期相符。
   2.获取查询结果列数
   SQL语句中加入order by子句,可以检测查询结果中包含多少列。如图2所示,输入:“1 or3=3 order by 1 #”,此语句where查询条件中逻辑或一个3=3的恒等式,所以不管表中是否有BH为1的用户,都能够查询成功。继续输入“1 or 3=3 order by 2#”,“1or3=3orderby3#”,按照第一二列和第三列排序,语句执行正常,说明查询结果中至少包含三列;输入“1 or 3=3 order by 4#”,语句执行失败,说明结果列的数量只有三列。
   3.获取当前数据库
  输入“1 union select 2,2,database()#”,其中database()函数可以返回当前数据库名,输出结果如图3所示,可以看到当前数据库为“injection’。
   4.获取数据库中的表
  输入:“1 union select 2,2,group_concat(table_name)frominformation_schema.tables where table_schema=database()#”,提交后屏幕上显示当前数据库中有两个表,表名为tab_user和test。
   5.获取表中字段
  输入:“1 union select 2,2,group_concat(column_name)frominformation_schema.columns where table_name=‘tab_user’ #”,提交后在看到tab_user表包含的三列,分别为bh,name,password。
   6.获取表中数据
  输入:“1 union select 2,group_concat(BH,name),group_concat(password)from tab_user #”,即可以查询出tab_user表中的用户名和密码这些重要数据,结果如图4所示。
  二SQL注入防范措施
   SQL注入攻击方式很多,在这个案例中我们使用简单的SQL注入攻击手段轻松获得数据库中未授权的信息,可见SQL注入攻击危害极大。如何防止或减轻SQL注入攻击?当然“防患于未然’是最好的策略,下面从多个角度介绍一些SQL注入攻击的防范措施。
  (一)数据库服务器端防范措施
   1.数据库服务器做好加固,安装防火墙,及时打补丁,使用最低权限账号运行数据库。    2.修改一些数据库端默认配置,比如oracle数据库中数据库链能够被远程访问,应该将其从普通账户中移除。
   3.删除系统安装时的默认账户,重新创建账户,根据应用定制账户,每个账户只授予最小权限。
   4.隔离用户登录,将查询权限与增、删、改权限分别用不同的账户来实现,使每个登录权限仅仅具有其功能所必需的数据库访问权限。
   5.撤销public权限,不使用“grant…to public”语句进行授权,精确授权。
   6.删除危险的系统存储过程、函数,比如SQL SERVER中的xp_cmdshell、sp_configure 等。
   7.使用数据库端编程,自定义存储过程或自定义函数,并且给某些用户只授予execute权限,前端程序只能通过调用存储过程或者函数来访问数据库。
   8.对传入存储过程的参数进行有效性验证,避免数据成为SQL控制流的一部分。
   9.口令等敏感数据不能直接存储在数据库中,最好是存储口令的加盐哈希。其他关键数据也都使用强加密技术进行存储。
   10.避免明显的对象名。比如表中存密码的列名定义为password,pwd,pass等,这是个安全隐患。
  (二)Web服务器端防范措施
   1.安装Web应用防火墙,关闭不需要的端口和权限,设置安全目录保护重要文件。
   2.使用独立的主机做服务器,避免與数据库服务器部署在同一台主机上。
   3.提高Web日志详细程度,定期查看日志。
   4.使用空的默认Web站点,查询请求未找到匹配值,则默认跳转到该站点。
  (三)Web前端程序防范措施
   1.验证每一个输入值,对用户请求的数据进行过滤。
   2.封装输入校验类,对输入项校验通过后,再用于构造动态SQL语句。
   3.使用预编译的SQL语句绑定变量,使攻击者无法改变SQL语句的结构。如:
   $stmt=$conn?prepare(“INSERT INTO MyUsers(XM,id,adr)VALUES(?,?,?)”);
   $stmt?bind_param(“qaz”,$id,$adr)。
   4.使用参数化语句,避免在前端构造动态SQL。
   5.检查数据类型。
   6.隐藏不必要的错误信息。
   7.输入的内容用其他控件产生,比如密码通过软键盘输入,动态写人页面。
  三、结语
   SQL注入是一种常见的攻击手段,危害极大。本文通过案例演示介绍SQL注入攻击的过程,并总结了常用的防范措施,有助于一定程度上减轻SQL注入的危害,具有一定的应用价值。
  随着技术的发展,SQL注入的漏洞也在更新,SQL注入攻击技术也在发展,它的隐蔽性和攻击性更强。所以随着新技术的不断出现,SQL注入漏洞的研究也要不断深入。
  参考文献:
   [1]黄芳,苏桂莲.Web应用中SQL注入攻击与防范探析[J].软件导刊,2012,1(11):137-138.
   [2]唐林.数据库SQL注入技术及其防护[J].湖北函授大学学报,2014(10):104-105.
   [3]吴宗卓.SQL注入防御技术研究与实现[J]电子测试,2015(21):81-82.
其他文献
当前,课程改革强调学习方式的转变,它强调学生的主体性、重视对学生能力的培养,以往,教师总是担心学生学不懂文章,在教学中不断地对课文进行讲解、剖析,致使学生丧失学习语文
随着社会的进步和科学水平的不断提高,我国各行各业都得到了快速的发展.在发展的同时,各行各业的供电需求不断增大,这就对电力企业的发展提出了更高的要求.近些年来,电力企业
一个人的记忆就是一座城市,时间侵蚀着一切建筑,把高楼和道路全部沙化。如果你不往前走,就会被沙子掩埋。一路上你将路过一双双背影,回头却不曾再见,即使泪流满面,也只能往前走。  分班考将至,班里似乎进入了老师曾梦寐以求的状态——下课不离开座位,没人在课上搭话。但每个人也前所未有地疲惫,一顿好觉也变成了奢侈。家长们也跟着进入了备战状态,频繁进入学校为孩子送饭。母亲也一样,三天来送一次饭。  我像平常一样
期刊
摘要:大数据时代,档案信息化建设是未来档案管理的重要发展方向。在现代信息化时代,档案的管理要改革创新,就要充分运用信息化手段,有效提高档案管理的规范性和使用效率。本论文通过分析信息化技术对档案建设和管理的效用,分析档案管理在信息化建设方面存在的问题,并提出相应的解决措施,为新时期加快档案信息化管理进程提供参考。  关键词:档案信息化;档案管理  中图分类号:G271 文献识别码:A 文章编号:10
摘要:客户满意度指的是客户的期望值与客户实际体验的匹配程度,现阶段酒店行业竞争愈发激烈,要在竞争中站住脚跟,必须提升客户满意度,客户满意度是衡量酒店服务的重要指标,本文即通过探讨当前酒店满意度现状以及具体的提升策略,展开分析酒店管理中满意度理论的应用。  关键词:酒店管理;客户满意度理论;应用分析  中图分类号:F59 文献识别码:A 文章编号:1001-828X(2019)016-0166-01
英语教学的最终目的是发展学生的英语语言技能,培养学生的英语技能,培养学生的良好英语交际能力.它包括听、说、读、写四个方面的技能.听和读是理解的技能,说和写是表达的技
运动心理创伤往往与运动员的挫折感有密切的联系.任何刺激都会引发人的情绪体验,它是人生命适应外界环境的一种反馈机制.情绪、行为、欲望和目标是一系列因果联系的心理环节,
2000年3月~2004年3月,我院应用逆行股骨交锁髓内钉治疗股骨远端骨折26例,取得满意效果.
英语是语言工具,学英语不会脱口而出就等于白学,所以教师在课堂上就得想方设法使学生活学活用,随口而出,“触景生言”.
学生写作水平一般都参差不齐,有的同学一提到写作文就犯头疼。新的《语文课程标准》指出:“写作教学应贴近学生实际,让学生易于动笔,乐于表达。”怎样激发学生表达的愿望呢?我借《幸福是什么》这篇课文,把写作训练渗透于阅读教学之中,通过补白练习收到了良好的效果,孩子们把正能量从生活带进课堂,学生的奇思妙想,生命力的涌动,让我倍感幸福,我庆幸自己没有错过这道美丽的风景。  片段一:你认为幸福是什么?师:孩子们
期刊