国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
SQL指令植入式攻擊的危害及其防范措施

SQL指令植入式攻擊的危害及其防范措施

作者: admin ,  出處:IT專家網(wǎng)論壇, 責任編輯: 陳子琪, 
2010-04-01 07:00
  在設計或者維護Web網(wǎng)站時,你也許擔心它們會受到某些卑鄙用戶的惡意攻擊。的確,如今的Web網(wǎng)站開發(fā)者們針對其站點所在操作系統(tǒng)平臺或Web 服務器的安全性而展開的討論實在太多了。

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

  在設計或者維護Web網(wǎng)站時,你也許擔心它們會受到某些卑鄙用戶的惡意攻擊。的確,如今的Web網(wǎng)站開發(fā)者們針對其站點所在操作系統(tǒng)平臺或Web 服務器的安全性而展開的討論實在太多了。不錯,IIS 服務器的安全漏洞可能招致惡意攻擊;但你的安全檢查清單不應該僅僅有 IIS 安全性這一條。有些代碼,它們通常是專門為數(shù)據(jù)驅(qū)動(data-driven) 的 Web 網(wǎng)站而設計的,實際上往往同其它IIS漏洞一樣存在嚴重的安全隱患。這些潛伏于代碼中的安全隱患就有可能被稱為“SQL指令植入式攻擊” (SQL injection) 的手段所利用而導致服務器受到攻擊。

  SQL指令植入式攻擊技術(shù)使得攻擊者能夠利用Web應用程序中某些疏于防范的輸入機會動態(tài)生成特殊的 SQL指令語句。舉一個常見的例子:

  某Web網(wǎng)站采用表單來收集訪問者的用戶名和密碼以確認他有足夠權(quán)限訪問某些保密信息,然后該表單被發(fā)送到 Web 服務器進行處理。接下來,服務器端的ASP 腳本根據(jù)表單提供的信息生成 SQL 指令語句提交到SQL服務器,并通過分析SQL服務器的返回結(jié)果來判斷該用戶名/密碼組合是否有效。

  為了實現(xiàn)這樣的功能,Web 程序員可能會設計兩個頁面:一個 HTML 頁面 (Login.htm) 用于登錄,另一個ASP 頁面(ExecLogin.asp) 用于驗證用戶權(quán)限(即向數(shù)據(jù)庫查詢用戶名/密碼組合是否存在)。具體代碼可能象這樣:

  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 (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 指令植入式攻擊的理想目標。具體而言,設計者把用戶的輸入直接用于構(gòu)建SQL 指令,從而使攻擊者能夠自行決定即將被執(zhí)行的 SQL 指令。例如:攻擊者可能會在表單的用戶名或密碼欄中輸入包含“ or ”和“=” 等特殊字符。于是,提交給數(shù)據(jù)庫的 SQL 指令就可能是:

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

  這樣,SQL 服務器將返回 tblUsers 表格中的所有記錄,而 ASP 腳本將會因此而誤認為攻擊者的輸入符合 tblUsers 表格中的第一條記錄,從而允許攻擊者以該用戶的名義登入網(wǎng)站。

  SQL 指令植入式攻擊還有另一種形式,它發(fā)生在 ASP 服務器根據(jù) querystring 參數(shù)動態(tài)生成網(wǎng)頁時。這里有一個例子,此 ASP 頁面從 URL 中提取出 querystring 參數(shù)中的 ID 值,然后根據(jù) ID 值動態(tài)生成后繼頁面:

  代碼:<% 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 %>

  在一般情況下,此 ASP 腳本能夠顯示具有特定 ID 值的文章的內(nèi)容,而 ID 值是由 URL 中的 querystring 參數(shù)指定的。例如:當URL為http://www.example.com/Article.asp?ID=1055 時,ASP 就會根據(jù) ID 為1055的文章提供的內(nèi)容生成頁面。

  如同前述登錄頁面的例子一樣,此段代碼也向SQL 指令植入式攻擊敞開了大門。某些惡意用戶可能會把 querystring 中的文章 ID 值偷換為“0 or 1=1”等內(nèi)容(也就是說,把 URL 換成http://www.example.com/Article.asp?ID=0 or 1=1) 從而誘使 ASP 腳本生成不安全的SQL指令如:

  代碼:SELECT * FROM tblArticles WHERE ID=0 or 1=1

  于是,數(shù)據(jù)庫將會返回所有文章的內(nèi)容。

  當然了,本例服務器所受的攻擊不一定會引起什么嚴重后果??墒?,攻擊者卻可能變本加厲,比如用同樣的手段發(fā)送 DELETE 等SQL指令。這只需要簡單地修改前述 URL 中的querystring 參數(shù)就可以了!例如:任何人都可以通過 http://www.example.com/Article.asp?ID=1055; DELETE FROM tblArticles ”之類的URL來訪問Web網(wǎng)站。

  SQL指令植入式攻擊的危害

  SQL 指令植入式攻擊可能引起的危害取決于該網(wǎng)站的軟件環(huán)境和配置。當 Web 服務器以操作員(dbo)的身份訪問數(shù)據(jù)庫時,利用SQL 指令植入式攻擊就可能刪除所有表格、創(chuàng)建新表格,等等。當服務器以超級用戶 (sa) 的身份訪問數(shù)據(jù)庫時,利用SQL 指令植入式攻擊就可能控制整個SQL服務器;在某些配置下攻擊者甚至可以自行創(chuàng)建用戶賬號以完全操縱數(shù)據(jù)庫所在的Windows 服務器。

  SQL指令植入式攻擊

  杜絕SQL 指令植入式攻擊的第一步就是采用各種安全手段監(jiān)控來自 ASP request 對象 (Request 、 Request.QueryString 、 Request.Form 、 Request.Cookies 和 Request.ServerVariables) 的用戶輸入,以確保 SQL 指令的可靠性。具體的安全手段根據(jù)你的 DBMS 而異,下面給出的都是基于 MS SQL Server的例子。

  在前述登錄頁面的例子中,腳本期望得到的兩個輸入變量 (txtUserName 和 txtPassword)均為字符串類型。無論用戶在哪個參數(shù)中插入單引號,他都可能讓數(shù)據(jù)庫執(zhí)行單引號中的 SQL 指令。為了杜絕此類SQL 指令植入式攻擊,我們可以借助 Replace 函數(shù)剔除單引號,比如:

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

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

  在第二個例子中,腳本期望的輸入變量是長整型變量 (ID) 。用戶可以通過在 ID 參數(shù)中插入特殊字符來運行不安全的 SQL 指令。為了為了杜絕此類SQL 指令植入式攻擊,我們只需要借助 CLng 函數(shù)限制 ID 值為長整型變量,比如: 代碼:p_lngID = CLng(Request("ID"))

  當用戶試圖在 ID 中包含特殊字符時,CLng 就會產(chǎn)生一個錯誤。

  為了進一步減少SQL 指令植入式攻擊的危脅,請務必清除客戶端錯誤信息文本中的所有技術(shù)資料。某些錯誤信息往往泄露了技術(shù)細節(jié),從而讓攻擊者可以看出服務器的安全漏洞所在。這里指的錯誤信息不但包括應用程序生成的消息框,還包括來自 IIS 的出錯提示。為此,你可以禁止由 IIS 發(fā)送的詳細錯誤信息,而改用自定義的出錯頁面。

  最后,為了減輕SQL 指令植入式攻擊的危害,請限制 Web 應用程序所用的數(shù)據(jù)庫訪問賬號權(quán)限。一般來說,應用程序沒有必要以 dbo 或者 sa 的身份訪問數(shù)據(jù)庫。記住,給它的權(quán)限越少,你的網(wǎng)站越安全!你還可以考慮分別給每個需要訪問數(shù)據(jù)庫的對象分配只擁有必需權(quán)限的賬號,以分散安全漏洞。例如:同是前端用戶界面,當用于公共場所時就比用于具有本地內(nèi)容管理機制的平臺時更加需要嚴格限制數(shù)據(jù)庫訪問權(quán)限。
 
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
asp學習
asp事務處理的另外一個方法
ASP購物車代碼超級簡單
[開發(fā)中]ASP數(shù)據(jù)庫封裝驅(qū)動。 Drunk Dream-
vb登錄界面設計筆記(連接SQLServer2000數(shù)據(jù)庫)
用Dreamweaver MX ACCESS制作企業(yè)新聞系統(tǒng)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服