ASP.NET指令碼侵入概述{引用MSDN}

來源:互聯網
上載者:User
引用:http://msdn.microsoft.com/zh-cn/library/w1sw53ds(VS.80).aspx ASP.NET指令碼侵入概述

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

一個簡單化的指令碼利用的工作方式如下所示。如果應用程式允許使用者發布對最新影片的評論以供其他使用者閱讀,則利用指令碼的步驟可以是:

  1. 應用程式顯示一個使用者可以輸入評論的表單。惡意使用者編寫了一個其中包含 <script> 塊的評論。

  2. 發送表單,惡意使用者的評論將儲存在資料庫中。

  3. 另一使用者訪問該網站。在構造頁時,應用程式會從資料庫中讀取評論並將它們放在頁中。惡意使用者的 <script> 塊將寫入頁中,就好像它是文本評論一樣。

  4. 當第二個使用者的瀏覽器顯示此頁時,它將遇到 <script> 塊並執行它。

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

有關防止指令碼利用的資訊,請參見如何:通過對字串應用 HTML 編碼在 Web 應用程式中防止指令碼侵入。

SQL 陳述式利用

有一種指令碼利用的變體可以導致惡意 SQL 陳述式的執行。如果應用程式提示使用者輸入資訊並將使用者的輸入串聯為表示 SQL 陳述式的字串,則會出現這種情況。例如,應用程式可能提示輸入客戶姓名,目的是為了執行類似如下的語句:

複製代碼
"Select * From Customers where CustomerName = " & txtCustomerName.Value

但是,對資料庫有所瞭解的惡意使用者可能使用文字框輸入包含客戶姓名的嵌入式 SQL 陳述式,產生類似如下的語句:

複製代碼
Select * From Customers Where CustomerName = 'a' Delete From Customers Where CustomerName > ''

執行該查詢時,就會危害資料庫。

防止指令碼利用

防止指令碼利用的主要方法就是決不信任來自使用者的資訊。假定從瀏覽器發送到您的應用程式的任何資料都包含惡意指令碼。

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

ASP.NET 為您提供了幾種有助於防止指令碼利用的方法:

  • ASP.NET 對查詢字串、表單變數和 Cookie 值執行請求驗證。預設情況下,如果當前的 Request 包含 HTML 編碼的元素或某些 HTML 字元(如表示長破折號的 ),則 ASP.NET 頁架構將引發一個錯誤。

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

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

  • 為了防止 SQL 陳述式利用,決不能串聯字串建立 SQL 查詢。相反,使用參數化查詢並將使用者輸入分配給參數對象。有關詳細資料,請參見資料配接器命令中的參數。

  • 始終對一組預期值執行表單輸入驗證以及字串格式設定/類型驗證。例如,如果特定的表單變數應為整數,則使用 System.Int32.TryParse 方法驗證該值是否確實為整數,並使用範圍檢查協助確保該值位於可接受範圍內。

請參見任務

如何:通過對字串應用 HTML 編碼在 Web 應用程式中防止指令碼侵入
概念

Web 應用程式安全威脅概述
Web 應用程式的基本安全做法 (Visual Studio)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.