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 feedbackvar newFeedback = new Feedback();newFeedback.Message = Server.HtmlEncode(message);newFeedback.EntryDate = DateTime.Now;db.Feedbacks.InsertOnSubmit(newFeedback);db.SubmitChanges(); // Redirectreturn RedirectToAction(“Index”);}請注意,Message 的值在提交到數據庫之前是在Create() 操作中經過HTML 編碼的。當在視圖中重新顯示Message 時,Message 被HTML 編碼,因而不會執行任何注入到Message 中的JavaScript。
總結
通常,人們喜歡使用本教程中討論的第一種方法,而不喜歡使用第二種方法。第二種方法的問題在於在數據庫中最終會保留HTML 編碼的數據。換言之,數據庫中的數據會包含奇怪的字符。這有什麼壞處呢?如果需要用除網頁以外的形式顯示數據庫數據,則將遇到問題。例如,不能輕易在Windows Forms 應用程序中顯示數據。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。