Javascript 注入

什麼是 JavaScript 注入攻擊?

每當接受用戶輸入的內容並從新顯示這些內容時,網站就很容易遭受 JavaScript 注入攻擊。讓咱們研究一個容易遭受 JavaScript 注入攻擊的具體應用程序。假設已經建立了一個客戶反饋網站。客戶能夠訪問網站並輸入對產品的反饋信息。當客戶提交反饋時,反饋信息從新顯示在反饋頁面上。html

客戶反饋網站是一個簡單的網站。不幸的是,此網站容易遭受 JavaScript 注入攻擊。html5

假設正在將如下文本輸入到客戶反饋表單中:數據庫

<script>alert(「Boo!」)</script>

此文本表示顯示警告消息框的 JavaScript 腳本。在某人將此腳本提交到客戶反饋表單後,消息 Boo! 會在未來任何人訪問客戶反饋網站時顯示瀏覽器

 

的攻擊。您可能還認爲別人不會經過 JavaScript 注入攻擊搞破壞。網站

如今,您對 JavaScript 注入攻擊的第一反應也許是不理會。您可能認爲 JavaScript 注入攻擊不過是一種 無傷大雅編碼

不幸的是,黑客會經過在網站中注入 JavaScript 進行破壞活動。使用 JavaScript 注入攻擊能夠執行跨站腳本 (XSS) 攻擊。在跨站腳本攻擊中,能夠竊取保密的用戶信息並將信息發送到另外一個網站。code

例 如,黑客可使用 JavaScript 注入攻擊竊取來自其餘用戶瀏覽器的 Cookies 值。若是將敏感信息(如密碼、信用卡賬號或社會保險號碼)保存在瀏覽器 Cookies 中,那麼黑客可使用 JavaScript 注入攻擊竊取這些信息。或者,若是用戶將敏感信息輸入到頁面的表單字段中,而頁面受到 JavaScript 攻擊的危害,那麼黑客可使用注入的 JavaScript 獲取表單數據並將其發送到另外一個網站。orm

請高度重視。認真對待 JavaScript 注入攻擊並保護用戶的保密信息。在接下來的兩部分中,咱們將討論防止 ASP.NET MVC 應用程序受到 JavaScript 注入攻擊的兩種技術。htm

 

方法 1:視圖中的 HTML 編碼

 

阻止 JavaScript 注入攻擊的一種簡單方法是從新在視圖中顯示數據時,用 HTML 編碼任何網站用戶輸入的數據教程

如:<%=Html.Encode(feedback.Message)%>

使用 HTML 編碼一個字符串的含意是什麼呢?使用 HTML 編碼字符串時,危險字符如 < 和 > 被替換爲 HTML 實體,如 &lt; 和 &gt;。因此,當使用 HTML 編碼字符串 <script>alert(「Boo!」)</script>時,它將轉換爲 &lt;script&gt;alert(「Boo!」)&lt;/script&gt;。瀏覽器在解析編碼的字符串時再也不執行 JavaScript 腳本。而是顯示無害的頁面

方法 2:寫入數據庫以前的 HTML 編碼

除了在視圖中顯示數據時使用 HTML 編碼數據,還能夠在將數據提交到數據庫以前使用 HTML 編碼數據。第二種方法正是程序清單 4 中 controller 的狀況。

如:

public ActionResult Create(string message)
{
// Add feedback
var newFeedback = new Feedback();
newFeedback.Message = Server.HtmlEncode(message);
newFeedback.EntryDate = DateTime.Now;
db.Feedbacks.InsertOnSubmit(newFeedback);
db.SubmitChanges(); 

 

// Redirect
return RedirectToAction(「Index」);
}

請注意,Message 的值在提交到數據庫以前是在 Create() 操做中通過 HTML 編碼的。當在視圖中從新顯示 Message 時,Message 被 HTML 編碼,於是不會執行任何注入到 Message 中的 JavaScript。

總結

一般,人們喜歡使用本教程中討論的第一種方法,而不喜歡使用第二種方法。第二種方法的問題在於在數據庫中最終會保留 HTML 編碼的數據。換言之,數據庫中的數據會包含奇怪的字符。這有什麼壞處呢?若是須要用除網頁之外的形式顯示數據庫數據,則將遇到問題。例如,不能輕易在 Windows Forms 應用程序中顯示數據。

附加:神通常的注入

這是一個有技術含量的號牌遮擋。咱們先不說其是否是能奏效,不過,這個創意至關的NB啊。當你駕車經過某些路口時,被攝像頭捕捉到你的車牌,經過OCR變成文本(圖像識別技術,這裏爲車牌識別技術),而後他就DROP掉數據庫,因而,上圖的這個車牌就成了SQL注入。

SQL-injection-attackadjusted.jpg

相關文章
相關標籤/搜索