关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server加密与SQL注入的实际操作方案

    SQL Server加密与SQL注入的实际操作方案

    2010-06-30 17:56:00 出处:ITJS
    分享

    文章主要描述的是SQL Server加密与SQL注入的实际操作方案以及在其实际操作中,我们应注意的相关事项的具体描述,我们大家都知道SQL Server数据库上内置了加密用来保护各种类型的敏感数据。

    在很多时候,这个SQL Server加密对于你来说是完全透明的;当数据被存储时候被加密,它们被使用的时候就会自动加密。在其他的情况下,你可以选择数据是否要被加密。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不会提供任何内置的工具来加密你的数据。假如你需要保护存储在SQL Server上的数据,我们给你两条建议:第一,你可以利用GRANT 和DENY关键字来控制你想哪个用户可以在SQL Server加密中读取的数据。

    第二.假如你真的想对数据加密,不要设法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加密数据,记住你在这里所学到的知识,并利用到你的数据库中保证你的数据不被那些黑客攻击。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。