知识大全 加密与SQL注入

Posted

篇首语:风流不在谈锋胜,袖手无言味最长。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 加密与SQL注入相关的知识,希望对你有一定的参考价值。

SQL Server讲堂:加密与SQL注入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  今天让我们来看看在SQL Server 加密和SQL 注入攻击

  SQL Server上的加密   SQL Server上内置了加密用来保护各种类型的敏感数据 在很多时候 这个加密对于你来说是完全透明的 当数据被存储时候被加密 它们被使用的时候就会自动加密 在其他的情况下 你可以选择数据是否要被加密 SQL Server可以加密下列这些组件

  ·密码

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

  ·在服务器和用户之间传输的数据

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

  定义加密  在有些时候 如果对对象进行加密是防止将一些信息分享给他人 例如 一个存储进程可能包含所有者的商业信息 但是这个信息不能和让其他的人看到 即使他们公开的系统表格并可以看到对象的定义 这就是为什么SQL Server允许你在创建一个对象的时候进行加密 为了加密一个存储进程 使用下面形式的CREAT PROCEDURE 语句

CREATE PROCEDURE procedurename [;number][@parameter datatype[VARYING][ = defaultvalue][OUTPUT]][ …][WITH REPILE | ENCRYPTION | REPILE ENCRYPTION]   我们关心的仅仅是可选的WITH参数 你可以详细说明AREPILE或者ENCRYPTION 或者你可以同时说明它们 ENCRYPTION关键字保护SQL Server它不被公开在进程中 结果 如果ENCRYPTION在激活的时候系统存储进程sp_helptext就会被忽视 这个存储进程将被存储在用户创建进程的文本中 如果你不想要加密 你可以使用ALTER PROCEDURE 忽略WITH ENCRYPTION子句来重新创建一个进程

  为了能够使用加密 用户和服务器都应该使用TCP/IP NeorkLibraries用来连接 运行适当的Neork 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  strConnstrQuery = 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页面下 重新写的部分将和刚才我们在表中所看到的东西相似 即使你认为在你的应用程序中没有脆弱点 你应该遵守最小特权原则 使用我们建议的其他安全技术允许你的用户仅仅访问他们能够访问的 在你没有发现你数据库脆弱点的时候 只有这样 不会使你的数据库崩溃

cha138/Article/program/SQLServer/201311/22483

相关参考

知识大全 SQL Server 中加密数据须知

SQLServer中加密数据须知  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  日前有多条新闻提

知识大全 Oracle--使用Wrap工具加密你的SQL

Oracle--使用Wrap工具加密你的SQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  O

知识大全 SQL Server加密存储过程的破解问题

SQLServer加密存储过程的破解问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  CREA

知识大全 教你如何在SQL Server数据库中加密数据

教你如何在SQLServer数据库中加密数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为了

知识大全 php防止sql注入的函数介绍

  具体用法  addslashes防止SQL注入  虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入还是建议大家加强中文防止SQL注入的检查addslashes的问题在于黑客可以用

知识大全 SQL注入天书―ASP注入漏洞全接触

SQL注入天书―ASP注入漏洞全接触  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixin

知识大全 SQL注入天书之ASP注入漏洞全接触

SQL注入天书之ASP注入漏洞全接触  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  随着

知识大全 ASP.NET 实现SQL注入过滤

ASP.NET实现SQL注入过滤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一什么是SQL注入式

知识大全 SQL注入漏洞[2]

PHP网络开发详解:SQL注入漏洞[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 SQL注入漏洞[1]

PHP网络开发详解:SQL注入漏洞[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!