新闻中心
消费主张 IT业界 今日观察 消费警示 曝光台 热点专栏 奇闻趣事 一语惊人 专利之窗 动态备忘
领券购
生活必须 吃货优选 学习艺术 旅游出行 手机电脑 电子电器 热血男装 热销女装
图片中心
美女欣赏 风景欣赏 艺术欣赏 实物图片 制作美图 生活图片
下载中心
手机软件 语文数学 常用软件 红绿软件 信息社政 音体美合 科学自然 英语外语
映讯频道
浓缩电影 邻国热剧 一技之长 艺术无界 教育教学 纪录之窗 战争片 动作片 情感片 国内片 喜剧片 恐怖片 科幻片 大陆剧 港澳台剧 动漫片 明星云集 欧美剧集
聚划算
数码产品 服装服饰 家电家具 装潢装饰 商旅游玩 生活必备 二手特色 健康保健
FLASH频道
MTV类 运动游戏 益智游戏 女生游戏 休闲游戏 电脑运用 有声故事 有声艺术
社会专题
美文园地 制作教程 历史天空 游山玩水 美食天下 科技科幻 天文地理 时尚酷玩 健康保健 寻医问药 有书有道 农村特色 幽默笑话 汽车电子 星新一代 教育咨询 天下军事 硬件网络 黑白社会 靓丽女人 代码效果 免费资源 便民服务 办公达人 玄幻奇幻 软件技术
关闭
当前位置:首页社会专题硬件网络
举例讲解SQL注入及防御方法

SQL注入攻击对企业安全有巨大潜在威胁。一旦这种攻击得逞,黑客可利用这种攻击危害你的网络并访问破坏你的数据,甚至控制你的电脑。

什么是SQL注入?

SQL注入的原理十分简单。当应用把客户数据当作一种输入的时候,那些心怀不轨的人就有机会注入刻意编写的数据,这些数据会导致输入行为会成为SQL查询的一部分。

SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。

例如,以下列代码为例:

SELECT * FROM Users WHERE Username='$username' AND Password='$password'

该代码旨在展示用户列表的用户名和密码记录。使用Web界面,当系统提示输入用户名和密码的时候,黑客可能会输入:

1 or 1=1

1 or 1=1

结果是:

SELECT * FROM Users WHERE Username='1' OR '1' = '1' AND Password='1' OR '1' = '1'

黑客已经将OR条件成功注入验证过程。更糟糕的是,条件'1' = '1'通常为真,因此这个SQL查询往往会导致黑客绕过验证过程。

用类似“;”的符号将另一个查询附加到已有查询之后(此附加查询还对一部分已有查询进行解释)。黑客可能删除你的整个列表,甚至更改其中的数据。黑客可以用命令来控制你的操作系统,从而操控你的电脑,并将之作为攻击你其他网络的一个中间站。总而言之,SQL注入攻击可带来以下后果:

数据私密性的丧失

数据完整性的丧失

数据泄漏

损害整个网络

如何才能防止SQL注入攻击呢?

要做到防微杜渐,最重要的是清理数据和验证数据,这两项工作不能出现懈怠。清理数据是指通过函数运行任何递交的数据(如MySQL的mysql_real_escape_string()函数),以确保任何有威胁的字符,如“’”, 不会以数据方式输入到SQL查询。

验证则有所不同。验证是确保数据以被许可的方式递交。在最基础的操作中,验证包括确保电子邮件地址包含@符号,当验证只接受整数的时候,就只能提供数字,而且数据长度不能超过最大限度。验证通常以两种方式执行:一是列出危险字符或不受欢迎字符的黑名单;二是列出给定字符的名单,后者需要编程人员花费更多心思。虽然可以在客户端验证数据,但是黑客同样能够对数据进行修改,因此用户有必要在服务器端验证所有数据。

但是清理数据和验证数据还远远不能保障用户数据的安全。下面为大家介绍十种方法,帮助大家防止或减缓SQL注入攻击:

1. 不信任任何人:假设所有用户递交的数据全部危险,对所有数据都进行验证。

2. 没必要的话,就不要使用动态SQL:包括使用过的预备陈述,参数化的查询或保存好的进程。

3. 更新和补丁:通常程序和数据库中都存在黑客可以通过SQL注入而利用的漏洞,因此非常有必要使用程序补丁和更新。

4. 防火墙:无论是基于软件还是基于设备,都可考虑使用Web应用防火墙(WAF)来过滤恶意数据。好的防火墙具备一套完整的默认规则,而且很容易随时添加新规则。一个WAF可以在新漏洞的相应补丁推出前,为用户提供有效的安全保护。

5. 减少攻击界面:及时对数据库的功能进行处理,以免被黑客利用。例如,xp_cmdshell扩展了MS SQL中保存的进程,而这使得Windows命令窗口激增,并且还通过了一个用于执行的字符串,这些无疑都对黑客有益。被xp_cmdshell激增的Windows进程有着和SQL Server服务帐户相同的优先安全权限。

6. 使用合适的权限:使用管理员级别权限的时候不要连接你的数据库,除非迫不得已。使用有限的帐户权限有利于数据安全,而且这样也能限制黑客的权限。

7. 保密隐私:假设你的应用不安全,而且会随加密操作或哈希密码以及其他机密数据,包括连接字符串,作出相应调整。

8. 不要泄露过多信息:黑客可以从出错信息中读取大量有关数据库架构的信息,因此要确保这些出错信息中尽可能显示比较少的信息。使用RemoteOnly CustomErrors模式在本地电脑上显示冗长的错误信息,如此外部黑客的不良操作就只能收到无法操作的出错信息。

9. 不要忘记根本原则:经常更改应用帐户的密码。虽然这是常识,但是实际生活中,很多人的密码都是几个月甚至几年也难换一次。

10. 购买更好的软件:在买下软件前,就让代码编写者先检查代码并修复客户应用中的安全漏洞。

提示:输入修改代码都可运行!
4
酒精度
90
顶一下
相关阅读
内容加载中……