校园第一站首页   校园   教育   考试   电脑   英语   读书   就业   论文   奥运   健康   QQ   游戏   下载 >>>最新偶像剧、台剧、韩剧、日剧在线收看!
XYDYZ-BBS  BLOG  WISH  ASK
本站
Google
网页
校园第一站
主页>电脑>网络安全> SQL Server安全之加密术和SQL注入攻击
  • 源于校园 服务于校园 进入校园第一站社区
  • SQL Server安全之加密术和SQL注入攻击
    http://www.xydyz.com 来源:校园第一站 2007-10-29 阅读: 评论

    SQL Server上内置了加密术用来保护各种类型的敏感数据。在很多时候,这个加密术对于你来说是完全透明的;当数据被存储时候被加密,它们被使用的时候就会自动加密。在其他的情况下,你可以选择数据是否要被加密。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隔离,所以,这里实际上是两个语句。第一个语句不存在的名字,第二个则撤消的整个Customers表。两个—SQL Server注释符,它可以使子句不发生语法错误。

    使用这个技术的变异,一个攻击程序可以在任何SQL语句或者存储过程上运行。通过使用xp_cmdshell扩展存储过程,一个攻击程序同样可以在操作系统命令下运行,显然,这是一个严重的漏洞。

    保护自己的数据库

    现在,你知道如何防范SQL注入攻击了吗?首先,你不能在用户输入中构造WHERE子句,你应该利用参数来使用存储进程。在最初的ASP页面下,重新写的部分将和刚才我们在表中所看到的东西相似。即使你认为在你的应用程序中没有脆弱点,你应该遵守最小特权原则。使用我们建议的其他安全技术允许你的用户仅仅访问他们能够访问的。在你没有发现你数据库脆弱点的时候,只有这样,不会使你的数据库崩溃。

    最后的建议

    这就是全部的SQL Server安全系列。也许你现在不是一个全面的专家,但是你已经了解了很多反面。下一步就是你要保护你SQL Server数据,记住你在这里所学到的知识,并利用到你的数据库中保证你的数据不被那些黑客攻击。

    上一篇:预防病毒的八个窍门  
    下一篇:RedHat Linux下防火墙配置入门必学

    ·网友互动--用户名: (新注册) 密码: 匿名评论 [所有评论]
    评论内容:(用户发表意见仅代表其个人意见,评论内容与校园第一站立场无关,请自觉遵守互联网相关政策法规)
    关注此文读者还看过
    • ·预防病毒的八个窍门
      ·RedHat Linux下防火墙配置入门必学
      ·账号防盗防骗经验小结
      ·如何做好做好网络安全
      ·彻底击破威胁你的恶意网页病毒
      ·详解Windows XP SP2自带防火墙设置
    最新更新
    • ·木马十大经典藏身地点
    文章关注度排行
    ·最新U盘病毒清除方法汇总
    ·系统反复重启源自网银病毒
    ·加密和解密Windows Vista文件夹和文件
    ·公共电脑上网 个人信息安全要如何保护
    ·木马十大经典藏身地点
    ·极点五笔漏洞破解登录Vista!
    ·ADSL Modem防黑客攻击“修炼秘技”
    ·教你鉴别防火墙的功能差异
    ·安全软件的12个谣言和误会
    ·如何做好做好网络安全
    热点推荐
    加密和解密Windows Vista文件夹和文件
    加密和解密Windows Vist
    公共电脑上网 个人信息安全要如何保护
    公共电脑上网 个人信息
    极点五笔漏洞破解登录Vista!
    极点五笔漏洞破解登录Vi
    ADSL Modem防黑客攻击“修炼秘技”
    ADSL Modem防黑客攻击“
    木马新花招 网游突然退出玩家须慎重登录
    木马新花招 网游突然退
    最新文章
    ·教你鉴别防火墙的功能差异
    ·最新U盘病毒清除方法汇总
    ·安全软件的12个谣言和误会
    ·系统反复重启源自网银病毒
    ·木马十大经典藏身地点
    ·极点五笔漏洞破解登录Vista!
    ·ADSL Modem防黑客攻击“修炼秘技”
    ·绕过Anti-Rookit的内核模块扫描技巧
    ·解读无线网络的七大安全困惑
    ·防御DDoS攻击实用指南
    频道推荐
    • ·木马十大经典藏身地点
    网站精华
    公共电脑上网 个人信息安全要如何保护
    公共电脑上网
    木马新花招 网游突然退出玩家须慎重登录
    木马新花招 
    加密和解密Windows Vista文件夹和文件
    加密和解密Wi
    • ·木马十大经典藏身地点
    Google ·高级搜索
    | 网站地图 | 关于我们 | 联系我们 | 广告服务 | 友情链接 | 版权声明 |
    版权所有:校园第一站 @2007-2008 未经授权禁止复制或建立镜像
    Site powered by hyperblue http://www.xydyz.com online services. all rights reserved. 鄂ICP备07009403号