關於SQL指令植入式攻擊的危害與防範措施

iSQlServer發表於2009-01-12
什麼是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 bjRS = 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 bjRS = Nothing %>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-536519/,如需轉載,請註明出處,否則將追究法律責任。

相關文章