您当前的位置:首页>>技术中心>>硬盘维修文章>>正文
 
SQL指令植入式攻击的危害及其防范措施
作者: 来源: 日期:2009-7-8 17:52:13  点击次数:

什么是SQL 指令植入式攻击?

在设计或者维护Web网站时,你也许担心它们会受到某些卑鄙用户的恶意攻击。的确,如今的Web网站开发者们针对其站点所在操作系统平台或Web 服务器的安全性而展开的讨论实在太多了。不错,IIS 服务器的安全漏洞可能招致恶意攻击;但你的安全检查清单不应该仅仅有 IIS 安全性这一条。有些代码,它们通常是专门为数据驱动(data-driven) 的 Web 网站而设计的,实际上往往同其它IIS漏洞一样存在严重的安全隐患。这些潜伏于代码中的安全隐患就有可能被称为“SQL指令植入式攻击” (SQL injection) 的手段所利用而导致服务器受到攻击。


SQL指令植入式攻击技术使得攻击者能够利用Web应用程序中某些疏于防范的输入机会动态生成特殊的 SQL指令语句。举一个常见的例子:


某Web网站采用表单来收集访问者的用户名和密码以确认他有足够权限访问某些保密信息,然后该表单被发送到 Web 服务器进行处理。接下来,服务器端的ASP 脚本根据表单提供的信息生成 SQL 指令语句提交到SQL服务器,并通过分析SQL服务器的返回结果来判断该用户名/密码组合是否有效。


为了实现这样的功能,Web 程序员可能会设计两个页面:一个 HTML 页面 (Login.htm) 用于登录,另一个ASP 页面(ExecLogin.asp) 用于验证用户权限(即向数据库查询用户名/密码组合是否存在)。具体代码可能象这样:


Login.htm (HTML 页面)


代码:<form action="ExecLogin.asp" method="post"> Username:

<input type="text" name="txtUsername"><br> Password:

<input type="password" name="txtPassword"><br>

<input type="submit"> </form>


ExecLogin.asp (ASP 页面)  代码:<% Dim p_strUsername,

p_strPassword, objRS, strSQL p_strUsername = Request.Form("txtUsername")

p_strPassword = Request.Form("txtPassword")

strSQL = "SELECT * FROM tblUsers " & _ "WHERE

Username=" & p_strUsername & _ " and Password=" &

p_strPassword & "" Set objRS = Server.CreateObject

("ADODB.Recordset") objRS.Open strSQL,

"DSN=..." If (objRS.EOF) Then Response.Write "Invalid

login." Else Response.Write "You are logged in as "

& objRS("Username") End If Set objRS = Nothing %>
 


乍一看,ExecLogin.asp 的代码似乎没有任何安全漏洞,因为用户如果不给出有效的用户名/密码组合就无法登录。然而,这段代码偏偏不安全,而且它正是SQL 指令植入式攻击的理想目标。具体而言,设计者把用户的输入直接用于构建SQL 指令,从而使攻击者能够自行决定即将被执行的 SQL 指令。例如:攻击者可能会在表单的用户名或密码栏中输入包含“ or ”和“=” 等特殊字符。于是,提交给数据库的 SQL 指令就可能是:


代码:SELECT * FROM tblUsers WHERE Username= or = and Password = or =
 

这样,SQL 服务器将返回 tblUsers 表格中的所有记录,而 ASP 脚本将会因此而误认为攻击者的输入符合 tblUsers 表格中的第一条记录,从而允许攻击者以该用户的名义登入网站。


SQL 指令植入式攻击还有另一种形式,它发生在 ASP 服务器根据 querystring 参数动态生成网页时。这里有一个例子,此 ASP 页面从 URL 中提取出 querystring 参数中的 ID 值,然后根据 ID 值动态生成后继页面:


代码:<% Dim p_lngID, objRS, strSQL p_lngID = Request

("ID") strSQL = "SELECT * FROM tblArticles WHERE ID="

 & p_lngID Set objRS = Server.CreateObject

("ADODB.Recordset") objRS.Open strSQL, "DSN=..."
 
If (Not objRS.EOF) Then Response.Write objRS

本新闻共2页,当前在第1页  1  2  


上一篇:防止Access数据库被非法下载的方法比较
下一篇:结束网站恶梦-SQL注入隐患
  北京总部: 4006-505-808
  天 津 部: 4006-505-808
  上 海 部: 4006-505-808
  深 圳 部: 4006-505-808
  广 州 部: 4006-505-808
  重 庆 部: 4006-505-808
  南 京 部: 4006-505-808
  其它地区: 4006-505-808
经典案例
中国石油管理局-Oracle数据库恢
中国网通-IBM EXP300磁盘阵列数
大连鸿德经贸有限责任公司-SQL
中国地质环境监测院-HP LH3000
藁城市东街百货-EFS文件解密成
工商银行某省分行-AIX删除LV数
中央电视台新闻评论部-苹果分
promise乔鼎硬盘阵列数据恢复成
麒麟童文化-苹果分区无法打开,
NAS 8100服务器数据恢复成功 
解决方案
raid磁盘阵列OFFLINE后的应急方
磁盘未被格式化,是否格式化数据
误GHOST、误一键恢复灾难应急方
误删除、误格式化数据灾难应急
LINUX FSCK数据出错灾难应急方
北亚数据恢复 - 联系我们 - 关于北亚 - 友情链接 - 网站地图 - RSS聚合 
版权所有 北亚数据恢复中心
全国统一客服热线:4006-505-808
北京总部:北京市海淀区中关村大街11号E世界A座8层832B室