`
star65225692
  • 浏览: 267934 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

SQL Server加密方法和防止SQL注入攻击

 
阅读更多

SQL Server上的加密方法

SQL Server上内置了加密术用来保护各种类型的敏感数据。在很多时候,这个加密术对于你来说是完全透明的;当数据被存储时候被加密,它们被使用的时候就会自动加密。在其他的情况下,你可以选择数据是否要被加密。SQL Server可以加密下列这些组件:
Extjs form validate表单验证使用心得
·密码

·存储过程,视图,触发器,用户自定义函数,默认值,和规则。

·在win2003和用户之间传输的数据

密码加密术货运专家

SQL Server自动将你分配给登陆和应用角色的密码加密。尽管当你可以从主sqlserver中直接察看系统表格而不需要密码。你不能给对这种情况作出任何修改,事实上,你根本不能破坏它。

定义加密术

在有些时候,如果对对象进行加密是防止将一些信息分享给他人。例如,一个存储进程可能包含所有者的商业信息,但是这个信息不能和让其他的人看到,即使他们公开的系统表格并可以看到对象的定义。这就是为什么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子句来重新创建一个进程。

为了能够使用加密术。用户和win2003都应该使用TCP/IP NetworkLibraries用来连接。运行适当的Network Utility和检查Force protocol encryption,看下表,用户和win2003之间的连接将不会被加密。
 
加密也不能完全自由。当连接确定后,要继续其他的构造,并且用户和win2003必须运行代码来解释加密和解释的包裹。这里将需要一些开销并且当在编译码的时候会使进程慢下来。如果网络包裹在你控制范围之外,使用这种做法是非常好的。
加密术中缺少什么?

你可以注意到在这个列表中缺少一些被加密的东西:你表格中的数据。在你存储数据之前,SQL Server不会提供任何内置的工具来加密你的数据。如果你需要保护存储在SQL Server上的数据,我们给你两条建议:第一,你可以利用GRANT 和DENY关键字来控制你想哪个用户可以在SQL Server中读取的数据。

第二.如果你真的想对数据加密,不要设法加密码。你可以利用被测试过的商业产品的算法。

SQL 注入攻击

SQL 注入攻击是一个常规性的攻击,它可以允许一些不法用户检索你的数据,改变win2003的设置,或者在你不小心的时候黑掉你的win2003。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并集,这个查询语句会返回sqlserver中所有的相关姓名。事实上,这个UNION技术可以被用来获得你sqlserver中大多数信息,看看这个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 <>''

看,那就是攻击程序从你的sqlserver获得的第一个雇员的名字。

更多的攻击程序

如果SQL注入仅仅只有数据暴光这个弱点就已经够糟糕的了,但是,实际上一个良好的攻击程序可以通过这个弱点获取你sqlserver中所有的资料。看下面这个例子:

';DROP TABLE Customers;--

SQL语句变成:

SELECT ContactName FROM Customers
WHERE CustomerID = ''
; DROP TABLE Customers;-- '

这个分号使语句和SQL Server隔离,所以,这里实际上是两个语句。第一个语句不存在的名字,第二个则撤消的整个Customers表。两个—SQL Server注释符,它可以使子句不发生语法错误。

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

保护自己的sqlserver

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

分享到:
评论

相关推荐

    SQL Server加密与SQL注入

    在你存储数据之前,SQL Server不会提供任何内置的工具来加密你的数据。...SQL注入攻击,SQL注入攻击是一个常规性的攻击,它可以允许一些不法用户检索你的数据,改变服务器的设置,或者在你不小心的时候黑掉你的服务器。

    SQL SERVER 2000开发与管理应用实例

    13.5.1 防止SQL注入式攻击 417 13.5.2 限制应用程序访问 418 13.5.3 不安全的扩展存储过程 419 第 14 章 系统表应用实例 423 14.1 系统对象概述 423 14.1.1 每个数据库中都存在的系统表 424 ...

    SQL Server数据库安全策略指南

    在本次的技术手册中,我们将讨论SQL Server数据库安全的话题,其中包括数据加密、SQL注入攻击、角色控制以及安全通信方面的内容,希望对SQL Server安全有个更全面了解的读者,赶紧下载阅读吧。 来自TT

    如何在SQL Server数据库中加密数据

    该文件介绍了关于安全测试注意的问题,如:进行sql注入的攻击网站导致机密信息被盗,对安全进行破坏。

    sqlserver2000基础(高手也有用)

    13.5.1 防止SQL注入式攻击 417 13.5.2 限制应用程序访问 418 13.5.3 不安全的扩展存储过程 419 第 14 章 系统表应用实例 423 14.1 系统对象概述 423 14.1.1 每个数据库中都存在的系统表 424 14.1.2 仅...

    web.net connstring加密程序

    三、防止sql注入攻击: 这个注入好像是打开Min Pool Size=999999一个很大的值,来破坏数据库。 这个链接保护的方法最好是: Date Source=(local);Initial Catalog=Works;User ID=sa;Password="password01!;...

    Mycat-server-1.6-RELEASE源码

    支持SQL黑名单、sql注入攻击拦截 支持prepare预编译指令(1.6) 支持非堆内存(Direct Memory)聚合计算(1.6) 支持PostgreSQL的native协议(1.6) 支持mysql和oracle存储过程,out参数、多结果集返回(1.6) 支持...

    计算机专业毕设精选-ASP科研信息管理系统设计(源代码+论文+开题报告+文献综述).rar

    同时,系统还采用了多种安全措施,如防止SQL注入攻击、数据加密等,确保系统的稳定性和安全性。 **适用对象** 本资源适用于需要进行科研信息管理的各类机构和个人,如科研机构、高校、企事业单位等。通过使用本...

    Web计算机配件报价系统项目源码,Java语言,代码源文件,毕业设计

    本系统还实现了一些安全措施,如防止SQL注入攻击、强制加密密码等等。 作为一篇毕业设计,该项目展示了作者对Java编程语言及其相关技术的理解和掌握水平。此外,该项目还证明了作者对Web应用程序开发的熟练程度,...

    计算机专业毕设ASP+ACCESS酒店预定管理系统(开题报告+源代码+论文).rar

    4. 安全性高:系统采用了多种安全措施,如数据加密、防止SQL注入攻击等,确保系统的数据安全。 总之,计算机专业毕设ASP+ACCESS酒店预定管理系统是一个功能完善、操作简便、安全性高的酒店预订平台,适用于各类酒店...

    asp.net知识库

    最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的...

    计算机专业毕设精选-ASP网络硬盘文件资源管理系统(源代码+论文+开题报告+答辩PPT+外文翻译).rar

    2. **安全性高**:系统采用多重安全措施,包括数据加密、防止SQL注入攻击等,确保数据安全。 3. **易用性好**:系统界面简洁明了,操作流程自然顺畅,用户无需专业培训即可轻松上手。 4. **扩展性强**:系统采用模块...

    Mycat2数据库中间件-其他

    支持密码加密支持服务降级支持IP白名单支持SQL黑名单、sql注入攻击拦截支持分表(1.6)集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。优点:1、基于阿里巴巴的开源项目Cobar,其稳定...

    数据库审计系统需求说明.docx

    内置高危SQL查询和注入、远程命令执行、跨站脚本攻击、 FTP和telnet高危指 令等审计规则不少于 300种。 规则可支持导入、导出、优先级调整、分组、批量加载等。 9 白名单 支持用户名、操作类型、IP地址、客户端工具...

Global site tag (gtag.js) - Google Analytics