首页
学院学院学院
论坛
新闻
博客
相册
软件
商品
音乐
电影
留言
注册
Login
学院
博客
新闻
论坛
相册
软件
商品
音乐
电影
祝福墙
留言簿
网站运营
网络技术
上网冲浪
Web开发
数据库
网页设计
编程语言
操作系统
网站首页
>
学院首页
>
文章浏览
阿帕奇网站公告.
SQL Server上的数据加密与SQL注入攻击
来源:互联网作者:阿帕奇
发表时间:[2008-10-9 21:34:12]。评论 0 篇
浏览118次。最后阅读时间:[2009-1-6 9:52:53]
文章字体【
大
中
小
】
SQL Server上内置了加密用来保护各种类型的敏感数据。在很多时候,这个加密对于你来说是完全透明的;当数据被存储时候被加密,它们被使用的时候就会自动加密。在其他的情况下,你可以选择数据是否要被加密。SQL Server可以加密下列这些组件:·密码·存储过程,视图,触发器,用户自定义函数,默认值,和规则。·在服务器和用户之间传输的数据密码加密SQL Server自动将你分配给登陆和应用角色的密码加密。尽管当你可以从主数据库中直接察看系统表格而不需要密码。你不能给对这种情况作出任何修改,事实上,你根本不能破坏它。定义加密在有些时候,如果对对象进行加密是防止将一些信息分享给他人。例如,一个存储进程可能包含所有者的商业信息,但是这个信息不能和让其他的人看到,即使他们公开的系统表格并可以看到对象的定义。这就是为什么SQL Server允许你在创建一个对象的时候进行加密。为了加密一个存储进程,使用下面形式的
C
REAT PRO
C
EDURE 语句:
C
REATE PRO
C
EDURE procedurename [;number] [@parameter datatype [VARYING][ = defaultvalue][OUTPUT]] [, …] [WITH RE
C
OMPILE | EN
C
RYPTION | RE
C
OMPILE, EN
C
RYPTION]我们关心的仅仅是可选的WITH参数。你可以详细说明ARE
C
OMPILE或者EN
C
RYPTION,或者你可以同时说明它们。EN
C
RYPTION关键字保护SQL Server它不被公开在进程中。结果,如果EN
C
RYPTION在激活的时候系统存储进程sp_helptext就会被忽视,这个存储进程将被存储在用户创建进程的文本中。如果你不想要加密,你可以使用ALTER PRO
C
EDURE,忽略WITH EN
C
RYPTION子句来重新创建一个进程。为了能够使用加密。用户和服务器都应该使用T
C
P/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页面的请求串的一部分返回,那么开发员可以编写下面的代码获得数据: str
C
onn = "Provider=SQLOLEDB;Data Source=(local);" & _"Database=Northwind;Integrated Security=SSPI" Set cnn = Server.
C
reateObject("ADODB.
C
onnection") cnn.Openstr
C
onn strQuery = "SELE
C
T
C
ontactName FROM
C
ustomers " & _“WHERE
C
ustomerID = '" & Request.Form("
C
ustID") & "'" Set rstResults = cnn.Execute(strQuery) Response.Write(rstResults.Fields("
C
ontactName").Value)现在你知道什么地方有问题了吧?如果用户知道一个用户的ID,他可以通过检索来获得全部的相应的名字。现在明白了?获得额外的数据当然,对于一个攻击程序,尽管它不知道任何顾客的ID,甚至不用去猜,它也可以获得数据。为了完成这个工作,它将下面的文本输入到应用程序调用顾客ID的textbox中: customer ID: 'UNION ALL SELE
C
T
C
ontactName FROM
C
ustomersWHERE
C
ustomerID <>'如果你输入了这个代码,你将会看到返回一个询问语句: SELE
C
T
C
ontactName FROM
C
ustomersWHERE
C
ustomerID = '' UNION ALL SELE
C
T
C
ontactName FROM
C
ustomersWHERE
C
ustomerID <>'' 通过获得空和非空顾客的ID并集,这个查询语句会返回数据库中所有的相关姓名。事实上,这个UNION技术可以被用来获得你数据库中大多数信息,看看这个
C
ustomerID的值: 'UNION ALL SELE
C
T FirstName + ' ' + LastName FROMEmployees WHERE LastName <>' 它将SQL语句变成: SELE
C
T
C
ontactName FROM
C
ustomersWHERE
C
ustomerID = '' UNION ALL SELE
C
T FirstName + ' ' + LastName FROMEmployees WHERE LastName <>''看,那就是攻击程序从你的数据库获得的第一个雇员的名字。更多的攻击程序如果SQL注入仅仅只有数据暴光这个弱点就已经够糟糕的了,但是,实际上一个良好的攻击程序可以通过这个弱点获取你数据库中所有的资料。看下面这个例子: ';DROP TABLE
C
ustomers;-- SQL语句变成: SELE
C
T
C
ontactName FROM
C
ustomersWHERE
C
ustomerID = ''; DROP TABLE
C
ustomers;-- ' 这个分号使语句和SQL Server隔离,所以,这里实际上是两个语句。第一个语句不存在的名字,第二个则撤消的整个
C
ustomers表。两个—SQL Server注释符,它可以使子句不发生语法错误。使用这个技术的变异,一个攻击程序可以在任何SQL语句或者存储过程上运行。通过使用xp_cmdshell扩展存储过程,一个攻击程序同样可以在操作系统命令下运行,显然,这是一个严重的漏洞。保护自己的数据库现在,你知道如何防范SQL注入攻击了吗?首先,你不能在用户输入中构造WHERE子句,你应该利用参数来使用存储进程。在最初的ASP页面下,重新写的部分将和刚才我们在表中所看到的东西相似。即使你认为在你的应用程序中没有脆弱点,你应该遵守最小特权原则。使用我们建议的其他安全技术允许你的用户仅仅访问他们能够访问的。在你没有发现你数据库脆弱点的时候,只有这样,不会使你的数据库崩溃。最后的建议这就是全部的SQL Server安全系列。也许你现在不是一个全面的专家,但是你已经了解了很多反面。下一步就是你要保护你SQL Server数据,记住你在这里所学到的知识,并利用到你的数据库中保证你的数据不被那些黑客攻击。
关键字:
C
Asp
上一篇:
SQL SERVER 2005中同步复制
下一篇:
常用SQL语句整理
相关文章
SQL SERVER 2005中同步复制
优化SQL Server服务器内存配置的策略
MSSQL锁定的模式与锁定的管理知识
向外扩展数据库系统的两个选项--水平数据划分和垂直数据划分
无组件上传图片至SQLSERVER数据库
在SQL Server 2000和SQL Server 2005中构建并利用UDF表格
调整重心-从IIS到SQL Server数据库安全
SQL Server 2000企业版安装教程
用SQL Server为Web浏览器提供图片3
层次型和关系型、基因组序列数据库的分别
标题
内容
更多评论
作者
时间
搜索文章名称:
相关文章
调整重心-从IIS到SQL Server数据库安全
SQL Server 2000的安全配置
无组件上传图片至SQLSERVER数据库
用SQL Server为Web浏览器提供图片3
优化SQL Server服务器内存配置的策略
用ASP语言实现对SQL SERVER 数据库的操作
MSSQL锁定的模式与锁定的管理知识
使用SQL Server代理设置SQL Server数据库定时操作
SQL Server性能分析参数
向外扩展数据库系统的两个选项--水平数据划分和垂直数据划分
数据正在加载中......
阿帕奇网提示信息!
X
阿帕奇网站公告.