Contents ...
udn網路城邦
『資料隱碼』SQL Injection 的可能攻擊模式
2008/05/28 11:27
瀏覽941
迴響0
推薦0
引用1

以下內容擷取自Microsoft
原文網址 : http://www.microsoft.com/taiwan/sql/SQL_Injection.htm
原文公佈日期:2002年6月28日

文中另外再加上一點個人想法
---------------------------

一. 利用特殊指令攻擊

駭客於任何要求輸入資料時打入特殊指令或程式碼,讓破壞性程式碼『隱藏』在標準的SQL程式中,達到其攻擊目的。
==>Lupin: 也就是在網頁可輸入的欄位中輸入SQL指令來取代 原本系統'假定'使用者應該輸入的值


二. 利用系統的錯誤訊息找出資料庫弱點

要對資料庫進行存取或修改,必需要對資料庫的結構有所瞭解,通常駭客很難瞭解資料庫結構,但未經掩飾的錯誤訊息反而容易造成問題。

資料庫管理系統為能協助程式開發與管理人員了解錯誤指令所造成的問題與根源,會在錯誤訊息上顯示完整的資訊,

若電子商務系統未經防範而直接讓錯誤訊息顯示在網頁上,無異是給駭客入侵留下線索。


三. 為能有效的阻絕駭客利用『資料隱碼』方式入侵,微軟建議採取以下各項防範之道:

1. 加強程式上的安全檢查措施:在程式中加上輸入資料型態檢查、資料長度檢查與資料內容檢查,讓駭客無法利用隱藏於輸入資料的特殊指令或程式碼有機可乘。
==>Lupin: 本來就無法預期使用者會輸入什麼內容, 所以在程式處理資料之前一定要檢查;
    1. (option)在前端的javascript作輸入資料的格式驗證與檢查. 
    2. (recommend)在後端要處理資料之前, 也要檢查輸入資料的格式.


2. 妥善使用權限管理:在程式中勿用較高權限來存取資料庫,比如說讓SQL程式使用資料庫管理員(System Administrator, SA)身份來存取資料庫。
   此外,若使用Windows 2000作業系統搭配SQL Server則建議使用Windows 2000認證機制。
==>Lupin: 1. 一般來說, 所有的資料庫預設的資料庫系統管理員都不要輕易的使用, 最好是在符合該項的需求下, 建立相對最小權限的帳號來使用.
    2. Microsoft 最喜歡把自家的東西綁在一起了, 雖然不少人喜歡這種'整合', 但兩三個還可不錯, 變成一串葡萄就真的麻煩了.

   
3. 保持良好的程式開發習慣:撰寫資料庫存取或查詢程式時,利用兩個單引號『’’』來標註任何輸入的變數給SQL程式;利用單引號『’』會讓駭客的隱碼易於得逞。
==>Lupin: 這才是要小心的重點, ex: SELECT * FROM Table1 WHERE id='input_value' ==>變成==> SELECT * FROM Table1 WHERE id='' or 1=1 --'


4. 將核心程式碼隱藏起來:勿讓網頁上程式直接存取或查詢資料庫,而是透過預存程式(Stored-procedure)來執行,
==>Lupin: 其實只是要說'勿讓網頁上程式直接存取或查詢資料庫', 更忌諱把資料庫的帳號密碼寫在可以從讓使用者存取到的檔案.
  
  
5. 以標準的訊息回覆給客戶:電子商務網站對於任何回覆給客戶的訊息應有所規範,
   透過程式攔截下任何作業系統或資料庫管理系統所可能產生的錯誤訊息,改以統一且明確的訊息來指導客戶。
==>Lupin: 經過處理後的錯誤訊息, 除了可以隱藏真正的錯誤之外, 也可以用易懂的訊息傳達給一般的大眾.


6. 刪除多餘的資料表(Table):資料庫管理系統安裝後會有幾個既存的資料表,這些資料表是供程式開發、範例資料庫或暫存使用,
   如”pub”及”Northwind”等,請在電子商務網站上線後移除;因為這些公用的資料表架構是公開的,易為駭客所利用。
==>Lupin: 反正系統預設安裝的、沒用到的東西都盡量不要使用.

-----------
Lupin補充:
1. 不要一廂情願地相信網路上的使用者會乖乖輸入你要他們輸入的資料.
2. 不要一廂情願地相信經過javascript所過濾後的資料.
3. HTML 中的 hidden 的欄位盡量不要用來儲存敏感的資料.
  
  
  

全站分類:知識學習 其他
自訂分類:Network Security
發表迴響

會員登入