`
star65225692
  • 浏览: 277806 次
  • 性别: 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 Server这样的数据库管理系统时,数据加密技术和防止SQL注入是确保数据安全的两个关键方面。本文将对SQL Server的数据加密方法进行简要介绍,并深入探讨SQL Server注入法及其预防措施。 首先,我们来了解...

    基于SQL server应用的高级SQL注入技术

    "基于SQL Server应用的高级SQL注入技术" SQL 注入技术概述 SQL 注入是一种常见的网络攻击手法,攻击者通过注入恶意的 SQL 代码来访问或修改数据库中的敏感数据。这种攻击手法通常是由于应用程序没有正确地验证用户...

    sqlserver注入攻击.doc

    ### SQLServer注入攻击知识点 ...**总结**: 构建全面的数据安全机制需要综合考虑加密技术的应用、SQL注入攻击的预防以及安全策略的持续改进。通过实施上述措施,可以有效提升SQLServer数据库的安全性和抵御能力。

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

    文件描述提到的安全测试中需要注意的问题主要涉及到了SQL注入攻击,这是一种常见的网络攻击方式,攻击者通过在应用程序中输入恶意SQL语句来获取未经授权的数据访问权限。这种攻击可能导致敏感信息泄露,如用户名、...

    SQLServer jar包

    PreparedStatement是预编译的SQL语句,可以防止SQL注入攻击,并提高性能。 4. **结果集处理**:执行查询后,会返回ResultSet对象,包含了查询结果。可以通过迭代ResultSet来获取每一行数据。 5. **事务管理**:在...

    Android通过webservice连接Sqlserver实例

    同时,对用户输入进行验证,防止SQL注入攻击。 在提供的压缩包文件中,"StockManageWebservice"和"StockManagement"可能是相关的源代码示例。"StockManageWebservice"可能包含服务器端的WebService实现,用于管理...

    SQL注入式攻击下的数据库安全——SQL Server下SQL注入攻击的有效防范.pdf

    接下来,文档从应用的角度出发,介绍了SQL注入攻击的原理、步骤和危害,并着重论述了在SQL Server环境下,针对SQL注入攻击的有效防范措施。这些安全措施包括但不限于身份认证、访问控制、操作系统安全、数据库加密、...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    2. **预编译语句(PreparedStatement)**:预编译的SQL语句可以显著提升执行速度,同时防止SQL注入攻击。 3. **批处理操作**:允许多个SQL语句一次性提交,减少网络通信次数,提高整体执行效率。 4. **游标支持**:...

    SQL Server安全之加密术

    为了检测和预防SQL注入攻击,开发者应检查代码中的动态SQL构造,尤其是涉及用户输入的部分。例如,ASP页面示例中的SQL查询,如果用户能控制`CustomerID`的值,他们可能会构造特殊的输入来获取额外的记录。避免这种...

    Android 连接C# SQLserver

    合理设计API,避免SQL注入攻击;使用异步任务处理网络请求,避免阻塞UI线程。 压缩包中的"TestHandler.rar"可能包含了示例的Web服务处理程序代码,而"WebserviceTest"可能是Android客户端用于测试连接和调用Web服务...

    JAVA连接sqlserver2008R2驱动sqljdbc4-3.0.jar

    8. **安全性**:使用预编译的PreparedStatement可以防止SQL注入攻击,同时,JDBC驱动还支持SSL加密以保护数据传输的安全。 9. **异常处理**:在编写Java数据库应用时,必须捕获并适当地处理`SQLException`,以确保...

    sqlserver.jar驱动下载

    - 防止SQL注入攻击,使用参数化查询或存储过程。 - 关闭不再使用的连接,避免资源泄漏。 8. **升级与兼容性**: 随着SQL Server版本的更新,微软不断优化JDBC驱动。尽管旧版本的驱动可能仍能运行,但为了充分...

    Windows-7.4-PHP适配SQLserver驱动

    与SQL Server的集成是许多企业和开发者的需求,因为SQL Server是一个功能强大的关系型...记住,安全总是首位,务必对敏感数据进行加密,并使用预处理语句防止SQL注入攻击。同时,定期更新驱动和PHP版本以保持安全性。

    SQL注入 如何防止SQL注入

    为了防止SQL注入攻击,需要了解攻击的机理和防护方法。 1. SQL注入攻击机理: SQL注入攻击的机理是攻击者通过向Web应用程序提交恶意的SQL代码,以达到非法访问或控制数据库的目的。攻击者可以通过猜表名、猜列名、...

    SQL Server 性能优化及管理艺术》下载内容(47324).rar

    书中可能涵盖用户权限管理,角色和权限分配,加密技术,以及如何防止SQL注入攻击。 9. SQL Server的最新特性:随着版本的更新,SQL Server引入了许多新的性能优化和管理功能,如In-Memory OLTP、Columnstore索引等...

    JSP sqlserver 登录注册.zip

    6. **安全措施**:在实际项目中,必须考虑安全性问题,如防止SQL注入攻击,对敏感数据进行加密,以及定期更新数据库凭据等。 7. **环境配置**:这个例子提到可以使用Eclipse或IntelliJ IDEA运行,这两个都是流行的...

    ASP.NET和SQLserver搭配运行的教程

    7. **安全性**:确保ASP.NET和SQL Server的安全性是关键任务,包括验证用户身份、限制权限、加密敏感数据、防止SQL注入攻击等。ASP.NET的身份验证和授权机制与SQL Server的角色管理和权限控制相结合,可实现精细的...

    sqlserver jdbc 4.2

    - **防止SQL注入**:应使用参数化查询或预编译的语句,避免用户输入直接影响SQL语句结构。 - **权限控制**:最小权限原则,只给予连接数据库所需的最小权限。 - **证书验证**:在使用SSL连接时,要验证服务器证书...

    Visual Basic+SQL Server

    6. 安全性:VB应用需要考虑与SQL Server的交互安全,包括用户名和密码的加密传输,权限管理,以及防止SQL注入攻击等。 7. 错误处理:VB中使用On Error语句进行错误处理,配合Try...Catch...Finally结构可以捕获和...

Global site tag (gtag.js) - Google Analytics