唐山网站建设

设为主页 加入收藏 繁體中文

SQL指令植进式攻击的危害及其防范措施

核心提示:在设计或保护Web网站时,你或许担心它们会遭到某些卑鄙用户的恶意攻击。的确,如今的Web网站开发者们针对其站点所在操纵系统平台或Web 服务器的安全性而展开的讨论实在太多了。

甚么是SQL 指令植进式攻击?

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

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

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

为了实现这样的功能,Web 程序员可能会设计两个页面:1个 HTML 页面 (Login.htm) 用于登录,另1个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 %>

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

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

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

SQL 指令植进式攻击还有另1种情势,它产生在 ASP 服务器根据 querystring 参数动态天生网页时。这里有1个例子,此 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

("ArticleContent") Set objRS = Nothing %>

1般情况下,此 ASP 脚本能够显示具有特定 ID 值的文章的内容,而 ID 值是由 URL 中的 querystring 参数指定的。例如:当URL为http://www.example.com/Article.asp?ID=1055 时,ASP 就会根据 ID 为1055的文章提供的内容天生页面。

犹如前述登录页面的例子1样,此段代码也向SQL 指令植进式攻击敞开了大门。某些恶意用户可能会把 querystring 中的文章 ID 值偷换为“0 or 1=1”等内容(也就是说,把 URL 换成http://www.example.com/Article.asp?ID=0 or 1=1) 从而诱使 ASP 脚本天生不安全的SQL指令如:
代码:SELECT * FROM tblArticles WHERE ID=0 or 1=1

因而,数据库将会返回所有文章的内容。

固然了,本例服务器所受的攻击不1定会引发甚么严重后果。可是,攻击者却可能变本加厉,比如用一样的手段发送 DELETE 等SQL指令。这只需要简单地修改前述 URL 中的querystring 参数便可以够了!例如:任何人都可以通过 http://www.example.com/Article.asp?ID=1055; DELETE FROM tblArticles ”之类的URL来访问Web网站。

SQL指令植进式攻击的危害

SQL 指令植进式攻击可能引发的危害取决于该网站的软件环境和配置。当 Web 服务器以操纵员(dbo)的身份访问数据库时,利用SQL 指令植进式攻击便可能删除所有表格、创建新表格,等等。当服务器以超级用户 (sa) 的身份访问数据库时,利用SQL 指令植进式攻击便可能控制全部SQL服务器;在某些配置下攻击者乃至可以自行创建用户帐号以完全操纵数据库所在的Windows 服务器。

SQL指令植进式攻击

杜尽SQL 指令植进式攻击的第1步就是采取各种安全手段监控来自 ASP request 对象 (Request 、 Request.QueryString 、 Request.Form 、 Request.Cookies 和 Request.ServerVariables) 的用户输进,以确保 SQL 指令的可靠性。具体的安全手段根据你的 DBMS 而异,下面给出的都是基于 MS SQL Server的例子。

在前述登录页面的例子中,脚本期看得到的两个输进变量 (txtUserName 和 txtPassword)均为字符串类型。不管用户在哪个参数中插进单引号,他都可能让数据库履行单引号中的 SQL 指令。为了杜尽此类SQL 指令植进式攻击,我们可以借助 Replace 函数剔除单引号,比如:

代码:p_strUsername = Replace(Request.Form("txtUsername"), "", "")

p_strPassword = Replace(Request.Form("txtPassword"), "", "")

在第2个例子中,脚本期看的输进变量是长整型变量 (ID) 。用户可以通过在 ID 参数中插进特殊字符来运行不安全的 SQL 指令。为了为了杜尽此类SQL 指令植进式攻击,我们只需要借助 CLng 函数限制 ID 值为长整型变量,比如: 代码:p_lngID = CLng(Request("ID"))

当用户试图在 ID 中包括特殊字符时,CLng 就会产生1个毛病。

为了进1步减少SQL 指令植进式攻击的危胁,请务必清除客户端毛病信息文本中的所有技术资料。某些毛病信息常常泄漏了技术细节,从而让攻击者可以看出服务器的安全漏洞所在。这里指的毛病信息不但包括利用程序天生的消息框,还包括来自 IIS 的出错提示。为此,你可以制止由 IIS 发送的具体毛病信息,而改用自定义的出错页面。

最后,为了减轻SQL 指令植进式攻击的危害,请限制 Web利用程序所用的数据库访问帐号权限。1般来讲,利用程序没有必要以dbo或sa的身份访问数据库。记住,给它的权限越少,你的网站越安全!你还可以考虑分别给每个需要访问数据库的对象分配只具有必须权限的帐号,以分散安全漏洞。例如:同是前端用户界面,当用于公共场所时就比用于具有本地内容治理机制的平台时更加需要严格限制数据库访问权限。

http://www.fw8.net/


TAG:用户,服务器,攻击者,代码,指令
评论加载中...
内容:
评论者: 验证码: