Javascript可以作為黑客攻擊網站的一種工具,其中注入js(javascript)惡意腳本就是其中一種手段之一,那麼下面,大家來學習一下如何預防js的注入攻擊呢?以下有一個不錯的陳述,跟大家分享:
什麼是 JavaScript 注入攻擊?
每當接受用戶輸入的內容並重新顯示這些內容時,網站就很容易遭受 JavaScript 注入攻擊。讓我們研究一個容易遭受 JavaScript 注入攻擊的具體應用程序。假設已經創建了一個客戶反饋網站。客戶可以訪問網站並輸入對產品的反饋信息。當客戶提交反饋時,反饋信息重新顯示在反饋頁面上。
客戶反饋網站是一個簡單的網站。不幸的是,此網站容易遭受 JavaScript 注入攻擊。
假設正在將以下文本輸入到客戶反饋表單中:
<script>alert(“Boo!”)</script>
此文本表示顯示警告消息框的 JavaScript 腳本。在某人將此腳本提交到客戶反饋表單後,消息 Boo! 會在將來任何人訪問客戶反饋網站時顯示的攻擊。您可能還認為別人不會通過 JavaScript 注入攻擊搞破壞。
現在,您對 JavaScript 注入攻擊的第一反應也許是不理會。您可能認為 JavaScript 注入攻擊不過是一種無傷大雅,不幸的是,黑客會通過在網站中注入 JavaScript 進行破壞活動。使用 JavaScript 注入攻擊可以執行跨站腳本 (XSS) 攻擊。在跨站腳本攻擊中,可以竊取保密的用戶信息並將信息發送到另一個網站。
例如,黑客可以使用 JavaScript 注入攻擊竊取來自其他用戶浏覽器的 Cookies 值。如果將敏感信息(如密碼、信用卡帳號或社會保險號碼)保存在浏覽器 Cookies 中,那麼黑客可以使用 JavaScript 注入攻擊竊取這些信息。或者,如果用戶將敏感信息輸入到頁面的表單字段中,而頁面受到 JavaScript 攻擊的危害,那麼黑客可以使用注入的 JavaScript 獲取表單數據並將其發送到另一個網站。
請高度重視。認真對待 JavaScript 注入攻擊並保護用戶的保密信息。在接下來的兩部分中,我們將討論防止 ASP.NET MVC 應用程序受到 JavaScript 注入攻擊的兩種技術。
方法 1:視圖中的 HTML 編碼
阻止 JavaScript 注入攻擊的一種簡單方法是重新在視圖中顯示數據時,用 HTML 編碼任何網站用戶輸入的數據
如:<%=Html.Encode(feedback.Message)%>
使用 HTML 編碼一個字符串的含意是什麼呢?使用 HTML 編碼字符串時,危險字符如 < 和 > 被替換為 HTML 實體,如 < 和 >。所以,當使用 HTML 編碼字符串 <script>alert(“Boo!”)</script>時,它將轉換為 <script>alert(“Boo!”)</script>。浏覽器在解析編碼的字符串時不再執行 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 應用程序中顯示數據。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。