您好!欢迎光临云杰通信官网,本公司专业为企业提供国际上网优化、企业MPLS-VPN、SD-WAN等跨境网络技术服务。
服务热线:13631779516

企业网络优化专家

国际网络互联综合解决方案

行业知识 NEWS

云杰通信助您了解行业,全方位掌握国际互联网最新资讯

您当前的位置:首页 > 资讯中心 > 行业知识

什么是SQL注入?

2019-11-29 16:13阅读:65

什么是SQL注入?

以一幅漫画为始,我们聊聊SQL注入。

什么是SQL注入?

SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。

SQL注入是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。

这个问题的来源是,SQL数据库的操作是通过SQL语句来执行的,而无论是执行代码还是数据项都必须写在SQL语句之中,这就导致如果我们在数据项中加入了某些SQL语句关键字(比如说SELECT、DROP等等),这些关键字就很可能在数据库写入或读取数据时得到执行。

我们通过使用SQLite建立一个学生档案表为例说明。

SQL数据库操作示例

什么是SQL注入?

点击运行按钮将会打印目前表中的内容。上述程序中我们建立了一个test.db数据库以及一个students数据表,并向表中写入了四条学生信息。

那么SQL注入又是怎么一回事呢?

我们尝试再插入一条恶意数据,数据内容就是漫画中的"Robert');DROP TABLE students;--",看看会发生什么情况。

SQL数据库注入示例

你将会发现,运行后,程序没有输出任何数据内容,而是返回一条错误信息:表单students无法找到!

这是为什么呢?

问题就在于我们所插入的数据项中包含SQL关键字DROP TABLE,这两个关键字的意义是从数据库中清除一个表单。而关键字之前的Robert');使得SQL执行器认为上一命令已经结束,从而使得危险指令DROP TABLE得到执行。也就是说,这段包含DROP TABLE关键字的数据项使得原有的简单的插入姓名信息的SQL语句。

什么是SQL注入?

变为了同时包含另外一条清除表单命令的语句

360截图20191129161738805.jpg

而SQL数据库执行上述操作后,students表单被清除,因而表单无法找到,所有数据项丢失。

如何防止SQL注入问题?

注入问题都是因为执行了数据项中的SQL关键字,那么,只要检查数据项中是否存在SQL关键字不就可以了么?

的确是这样,很多数据库管理系统都是采取了这种看似方便快捷的过滤手法,但是这并不是一种根本上的解决办法。

真正有效的解决办法如下:

首先,尽量避免使用常见的数据库名和数据库结构。在上面的案例中,如果表单名字并不是students,则注入代码将会在执行过程中报错,也就不会发生数据丢失的情况——SQL注入并不像大家想象得那么简单,它需要攻击者本身对于数据库的结构有足够的了解才能成功,因而在构建数据库时尽量使用较为复杂的结构和命名方式将会极大地减少被成功攻击的概率。

使用正则表达式等字符串过滤手段限制数据项的格式、字符数目等也是一种很好的防护措施。理论上,只要避免数据项中存在引号、分号等特殊字符就能很大程度上避免SQL注入的发生。

另外,就是使用各类程序文档所推荐的数据库操作方式来执行数据项的查询与写入操作,比如在上述的案例中,如果我们稍加修改,首先使用execute()方法来保证每次执行仅能执行一条语句,然后将数据项以参数的方式与SQL执行语句分离开来,就可以完全避免SQL注入的问题,如下所示:

SQL数据库反注入示例

什么是SQL注入?

而对于PHP而言,则可以通过mysql_real_escape_string等方法对SQL关键字进行转义,必要时审查数据项目是否安全来防治SQL注入。当然,做好数据库的备份,同时对敏感内容进行加密永远是最重要的。某些安全性问题可能永远不会有完美的解决方案,只有我们做好最基本的防护措施,才能在发生问题的时候亡羊补牢,保证最小程度的损失。

文章标题:《什么是SQL注入?》

本文部分资料来源于网络,转载目的在于传递更多信息及学习参考:https://www.gdyunjie.cn/showinfo-114-748-0.html

主要业务
国际上网优化MPLS-VPNSD-WAN短信业务
行业解决方案
跨境电商智能制造业互联网医疗国际教育
关于我们
公司简介服务支持商务合作 联系我们
Copyright @ 版权所有2012-2019 广东云杰通信 有限公司 粤ICP备18062193号-2

在线咨询

在线咨询真诚为您提供专业解答服务

咨询热线

13631779516欢迎致电咨询

微信咨询

二维码微信扫一扫咨询
返回顶部
×