SQL注入攻擊:攻與防

來源:互聯網
上載者:User

攻:
1. 擷取資料庫的結構資訊:
    攻擊者要成功實施一次攻擊,需要瞭解哪個表和列可用。SQL Server預設的行為是,當不正確查詢運行時返回錯誤訊息。例如攻擊者輸入使用者名稱:“'having 1=1;--”,資料庫將返回包含表名和代碼查詢中第一列的錯誤訊息;而group by語句可以更進一步確定查詢中的列:“'group by 表名.列名 having 1=1;--”,資料庫將返回查詢中的下一列;攻擊者可以繼續附加group by語句,直到不再收到錯誤訊息。

2. 擷取資料庫內容資訊:
    攻擊者可以利用變換錯誤訊息,擷取資料庫中儲存的資料,例如輸入使用者名稱:“'union select min(username),1 from Users where username>1;--”,資料庫將返回表中的第一個使用者名稱。攻擊者可以使用同樣的SQL注入,用password代替username得到使用者賬戶的密碼,以此類推,可以擷取資料庫表中的每條記錄。

3. 修改資料庫和內容:
    攻擊者通過“';”來結束一條查詢語句,然後附加破壞性的SQL語句,例如:“';delete from Accounts”或“';insert into Users (……)”。

4. 縮短查詢條件:
    攻擊者通過縮短查詢條件來繞過身份認證過程,例如輸入使用者名稱“admin'--”或“' or a==a--”

 

防:
    用戶端的任何輸入(欄位,查詢字串參數,Cookie等)都是不安全的,雖然Asp.Net提供了一些驗證控制項,但這些控制項都是產生用戶端指令碼在用戶端進行校正,雖然使用這些控制項可以減少頁面的住返次數,改善使用者體驗,但是不要僅僅依賴於此,因為駭客可以很容易避過用戶端指令碼。

1. 過濾或轉義危險字元:string.Replace("'","''")或正則;
    通常我們要定義合法字元,再檢查輸入是不是在合法字元範圍之內;而不是校正是否包含危險字元,因為非法的情況太多了,很容易漏掉。過濾是一種不理想的構思,因為“危險的”字元可能是使用者輸入的有效部分。另外,攻擊者可以使用ASCII十六進位字元和其他字元來通過驗證,例如用0x2C來代替單引號(')。

2. 參數化SQL查詢或預存程序:
    SqlParameter可以提供類型和長度檢查,並自動轉義使用者輸入。

3. 使用最小特權:
    將資料庫使用者能執行的動作限制到最少,絕對不要使用sa賬戶,因為sa具有操作資料庫的所有許可權。

4. 在伺服器上處理錯誤:
    成功的SQL注入攻擊不一定導致錯誤;導致錯誤的SQL注入通常是攻擊者正在收集資料庫資訊,是攻擊的前兆。在try..catch..finally中處理錯誤;<compilation debug="false"/>;<customErrors mode="RemoteOnly"/>。

   一般綜合運用這些方法...

 

Stop SQL Injection Attacks Before They Stop You 
新型SQL截斷攻擊和防禦方法 
SQL注入技術和跨站指令碼攻擊的檢測 
在ASP.NET中防止注入攻擊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.