作者:肖孝楠 伍岳 王雪梅 本文字数:2459
[摘要]“没有网络安全就没有国家安全”,网络安全的核心是保护网络可共享资源的安全。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.数据库服务器做好加固,安装防火墙,及时打补丁,使用最低权限账号运行数据库。
- 《新课程》杂志征稿通知
- 论文发表中的DOI是什么意思
- 《新课程》杂志论文知网收截图
- 新课程杂志主管单位主办单位说明
- 如何提高发表论文的“命中率”
- 《现代职业教育》杂志每版字数调整为2000字
- 现代职业教育杂志中国知网全文收录截图
- 中国知网期刊大全检索《现代职业教育》杂志
- 编辑在论文发表工作中的重要性
新课程杂志社提示:
本文标题:PHP下SQL注入攻击与防范
当前网址:http://www.xinkecheng.cn/laigao/14680.html