设为首页
收藏本站
最新电影
> 子栏目 常用技巧 | 网络安全 | 网路工程
您现在的位置: 首页=>计算机技术=>网络安全 订阅本栏目  
SQL Server安全-加密术和SQL注入攻击
时间: 2007-09-28 11:57:16 阅读次数:2667


SQL Server上的加密
SQL Server上内置了加密术用来保护各种类型的敏感数据在很多时候,这个加密术对于你来说是完全透明的;当数据被存储时候被加密,它们被使用的时候就会自动加密在其他的情况下,你可以选择数据是否要被加密
[table]
SQL Server可以加密下列这些组件:
·密码
·存储过程,视图,触发器,用户自定义函数,默认值,和规则
·在服务器和用户之间传输的数据
密码加密术 SQL Server自动将你分配给登陆和应用角色的密码加密尽管当你可以从主数据库中直接察看系统表格而不需要密码你不能给对这种情况作出任何修改,事实上,你根本不能破坏它
定义加密术 在有些时候,如果对对象进行加密是防止将一些信息分享给他人例如,一个存储进程可能包含所有者的商业信息,但是这个信息不能和让其他的人看到,即使他们公开的系统表格并可以看到对象的定义这就是为什么SQL Server允许你在创建一个对象的时候进行加密为了加密一个存储进程,使用下面形式的CREAT PROCEDURE 语句:
CREATE PROCEDURE procedurename [;number]

[@parameter datatype

[VARYING][ = defaultvalue][OUTPUT]]

[, …]

[WITH RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION]

我们关心的仅仅是可选的WITH参数你可以详细说明ARECOMPILE或者ENCRYPTION,或者你可以同时说明它们ENCRYPTION关键字保护SQL Server它不被公开在进程中结果,如果ENCRYPTION在激活的时候系统存储进程sp_helptext就会被忽视,这个存储进程将被存储在用户创建进程的文本中如果你不想要加密,你可以使用ALTER PROCEDURE,忽略WITH ENCRYPTION子句来重新创建一个进程
为了能够使用加密术用户和服务器都应该使用TCP/IP NetworkLibraries用来连接运行适当的Network Utility和检查Force protocol encryption,看下表,用户和服务器之间的连接将不会被加密


加密也不能完全自由当连接确定后,要继续其他的构造,并且用户和服务器必须运行代码来解释加密和解释的包裹这里将需要一些开销并且当在编译码的时候会使进程慢下来如果网络包裹在你控制范围之外,使用这种做法是非常好的
加密术中缺少什么?你可以注意到在这个列表中缺少一些被加密的东西:你表格中的数据在你存储数据之前,SQL Server不会提供任何内置的工具来加密你的数据如果你需要保护存储在SQL Server上的数据,我们给你两条建议:第一,你可以利用GRANT 和DENY关键字来控制你想哪个用户可以在SQL Server中读取的数据
第二.如果你真的想对数据加密,不要设法加密码你可以利用被测试过的商业产品的算法
SQL 注入攻击 SQL 注入攻击是一个常规性的攻击,它可以允许一些不法用户检索你的数据,改变服务器的设置,或者在你不小心的时候黑掉你的服务器SQL 注入攻击不是SQL Server问题,而是不适当的程序如果你想要运行这些程序的话,你必须明白这冒着一定的风险
测点定位弱点 SQL 注入的脆弱点发生在程序开发员构造一个WHERE 子句伴随着用户的输入的时候比如,一个简单的ASP程序允许用户输入一个顾客的ID然后检索公司的全部人员的名字,如果顾客ID如果作为ASP页面的请求串的一部分返回,那么开发员可以编写下面的代码获得数据:
strConn = "Provider=SQLOLEDB;Data Source=(local);" & _

"Database=Northwind;Integrated Security=SSPI"

Set cnn = Server.CreateObject("ADODB.Connection")

cnn.Open strConn

strQuery = "SELECT ContactName FROM Customers " & _

“WHERE CustomerID = '" & Request.Form("CustID") & "'"

Set rstResults = cnn.Execute(strQuery)

Response.Write(rstResults.Fields("ContactName").Value)

现在你知道什么地方有问题了吧?如果用户知道一个用户的ID,他可以通过检索来获得全部的相应的名字现在明白了?
获得额外的数据 当然,对于一个攻击程序,尽管它不知道任何顾客的ID,甚至不用去猜,它也可以获得数据为了完成这个工作,它将下面的文本输入到应用程序调用顾客ID的textbox中:
customer ID:

'UNION ALL SELECT ContactName FROM Customers

WHERE CustomerID <>'
如果你输入了这个代码,你将会看到返回一个询问语句:
SELECT ContactName FROM Customers

WHERE CustomerID = ''

UNION ALL SELECT ContactName FROM Customers

WHERE CustomerID <>''


通过获得空和非空顾客的ID并集,这个查询语句会返回数据库中所有的相关姓名事实上,这个UNION技术可以被用来获得你数据库中大多数信息,看看这个CustomerID的值:
'UNION ALL SELECT FirstName + ' ' + LastName FROM

Employees WHERE LastName <>'


它将SQL语句变成:
SELECT ContactName FROM Customers

WHERE CustomerID = ''

UNION ALL SELECT FirstName + ' ' + LastName FROM

Employees WHERE LastName <>''

看,那就是攻击程序从你的数据库获得的第一个雇员的名字
更多的攻击程序 如果SQL注入仅仅只有数据暴光这个弱点就已经够糟糕的了,但是,实际上一个良好的攻击程序可以通过这个弱点获取你数据库中所有的资料看下面这个例子:
';DROP TABLE Customers;--
SQL语句变成:
SELECT ContactName FROM Customers

WHERE CustomerID = ''

; DROP TABLE Customers;-- '


这个分号使语句和SQL Server隔离,所以,这里实际上是两个语句飞飞~Asp技术乐园第一个语句不存在的名字,第二个则撤消的整个Customers表两个—SQL Server注释符,它可以使子句不发生语法错误飞,飞Asp技术乐园
使用这个技术的变异,一个攻击程序可以在任何SQL语句或者存储过程上运行通过使用xp_cmdshell扩展存储过程,一个攻击程序同样可以在操作系统命令下运行,显然,这是一个严重的漏洞
保护自己的数据库 现在,你知道如何防范SQL注入攻击了吗?首先,你不能在用户输入中构造WHERE子句,你应该利用参数来使用存储进程在最初的ASP页面下,重新写的部分将和刚才我们在表中所看到的东西相似即使你认为在你的应用程序中没有脆弱点,你应该遵守最小特权原则使用我们建议的其他安全技术允许你的用户仅仅访问他们能够访问的在你没有发现你数据库脆弱点的时候,只有这样,不会使你的数据库崩溃
最后的建议 这就是全部的SQL Server安全系列也许你现在不是一个全面的专家,但是你已经了解了很多反面下一步就是你要保护你SQL Server数据,记住你在这里所学到的知识,并利用到你的数据库中保证你的数据不被那些黑客攻击



站内搜索    

下一篇Dreamweaver网页设计软件 生成代码SQL注入的漏洞

上一篇细说暴库的原理与方法

本栏目最新 栏目最新列表
windows7 巧用VHD格式加密文件夹,保护隐私
Windows 7使用 Bitlocker给“U盘/硬盘/SD卡
ESET(NOD32) ESS/EAV 4.0.437.0 BE 64位,支
ESET(NOD32) ESS/EAV 4.0.437.0 BE 32位 汉
P2P 终结者 4.06 LRLH 去广告最高优先权绿化
网站优化策划 栏目最新列表
增加网站外链的快速方法
网站上线前必做的30个检查
新的友情链接参考标准(没有google的PR情况
优化Google的AdSense广告的五个工具
王通讲SEO八大基础
站点最新 站点最新列表
微博推广的一些技巧
xhEditor v1.1.7 发布,
收集的一些轻量级非常实
50个新鲜兼容最新版本的
javascript中cookie的设
Excel中出现#VALUE!、#D
jquery插件:飞飞表情插件
十个使用HTML5开发的精彩
支持HTML5的浏览器有哪些
飞妮莫属:漫画:如何写出
历史最热10条信息  
MIME介绍 及 [1] [2] [3]
巧用Google和迅雷来下载
Transact SQL 常 [1] [2]
VIA Rhine II Fast Ethe
电脑常用端 [1] [2] [3]
Do you get a kick out
十道羊皮卷 欣赏+mp3版+
每日一句:A friend and
每日一句:Theres no tu
经典__悟透JavaScript
相关文章
Flash破解与加密综合
SQL Server安全-加密
Encode 批量 加密解
给源代码加密的脚本
word文件加密的办法
Windows 7使用 Bitl
windows7 巧用VHD格
 
 width= 
伟哥博客 西安房产 123最新电影 三四六四