熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET 腳本侵入概述

2013-11-13 09:58:45  來源: .NET編程 

  從浏覽器的角度來看網頁只是一個長字符串浏覽器會按順序處理這個字符串在此過程中會顯示某些字符同時按特殊規則解釋其他字符(如 <b> 和 <script>)如果惡意用戶可以將某些特殊字符插入到頁中則浏覽器將不知道這些字符不應該處於該位置將作為頁的一部分處理它們

  一個簡單化的腳本利用的工作方式如下所示如果應用程序允許用戶發布對最新影片的評論以供其他用戶閱讀則利用腳本的步驟可以是

  應用程序顯示一個用戶可以輸入評論的窗體惡意用戶編寫了一個其中包含 <script> 塊的評論

  發送窗體惡意用戶的評論將存儲在數據庫中

  另一用戶訪問該站點在構造頁時應用程序會從數據庫中讀取評論並將它們放在頁中惡意用戶的 <script> 塊將寫入頁中就好像它是文本評論一樣

  當第二個用戶的浏覽器顯示此頁時它將遇到 <script> 塊並執行它

  惡意用戶還可以使用其他方法來利用腳本大多數腳本利用都會要求應用程序接受惡意輸入並將其插入到頁中(或回顯它)浏覽器將在該頁中執行它這種利用帶來的潛在損害取決於所執行的腳本它可以是無足輕重的如在浏覽器中彈出的煩人的消息但是它也可能會竊取 Cookie竊取用戶輸入(如密碼)甚至在用戶的計算機上運行本機代碼(如果對 Internet 安全性的要求不嚴格)從而造成嚴重的損害

  SQL 語句利用有一種腳本利用的變體可以導致惡意 SQL 語句的執行如果應用程序提示用戶輸入信息並將用戶的輸入串聯為表示 SQL 語句的字符串則會出現這種情況例如應用程序可能提示輸入客戶姓名目的是為了執行類似如下的語句

  復制代碼Select * From Customers where CustomerName = & txtCustomerNameValue

  但是對數據庫有所了解的惡意用戶可能使用文本框輸入包含客戶姓名的嵌入式 SQL 語句產生類似如下的語句

  復制代碼Select * From Customers Where CustomerName = a Delete From Customers Where CustomerName >

  執行該查詢時就會危害數據庫

  防止腳本利用

  防止腳本利用的主要方法就是決不信任來自用戶的信息假定從浏覽器發送到您的應用程序的任何數據都包含惡意腳本

  同樣每次將字符串寫入頁時您都應該假定字符串可能包含惡意腳本(除非您自己以編程方式創建了字符串)例如在從數據庫中讀取字符串時您應該假定它們可能包含惡意腳本安全意識很強的開發人員甚至不信任他們自己的數據庫理由是他們認為惡意用戶可能有辦法篡改數據庫

  ASPNET 為您提供了幾種有助於防止腳本利用的方法

  ASPNET 對查詢字符串窗體變量和 Cookie 值執行請求驗證默認情況下如果當前的 Request 包含 HTML 編碼的元素或某些 HTML 字符(如表示長破折號的 —)則 ASPNET 頁框架將引發一個錯誤

  如果要在應用程序中顯示字符串但不信任這些字符串可以在響應中回寫字符串時將 HTML 編碼應用於這些字符串例如進行編碼後標記 <b> 將變成 &ltb&gt如果您要顯示的字符串來自您尚未確定信任其內容的數據庫時您可能會這樣做

  如果希望應用程序接受某個 HTML(例如來自用戶的某些格式設置說明)那麼在將這個 HTML 提交給服務器之前應在客戶端對其進行編碼

  為了防止 SQL 語句利用決不能串聯字符串創建 SQL 查詢相反使用參數化查詢並將用戶輸入分配給參數對象有關詳細信息請參見數據適配器命令中的參數

  始終對一組預期值執行窗體輸入驗證以及字符串格式設置/類型驗證例如如果特定的窗體變量應為整數則使用 Int……TryParse 方法驗證該值是否確實為整數並使用范圍檢查幫助確保該值位於可接受范圍內


From:http://tw.wingwit.com/Article/program/net/201311/12183.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.