什么是JavaScript注入攻擊?
Javascript可以作為黑客攻擊網(wǎng)站的一種工具,其中注入js(javascript)惡意腳本就是其中一種手段之一,那么下面,大家來學(xué)習(xí)一下如何預(yù)防js的注入攻擊呢?以下有一個(gè)不錯(cuò)的陳述,跟大家分享:
什么是 JavaScript 注入攻擊?
每當(dāng)接受用戶輸入的內(nèi)容并重新顯示這些內(nèi)容時(shí),網(wǎng)站就很容易遭受 JavaScript 注入攻擊。讓我們研究一個(gè)容易遭受 JavaScript 注入攻擊的具體應(yīng)用程序。假設(shè)已經(jīng)創(chuàng)建了一個(gè)客戶反饋網(wǎng)站??蛻艨梢栽L問網(wǎng)站并輸入對產(chǎn)品的反饋信息。當(dāng)客戶提交反饋時(shí),反饋信息重新顯示在反饋頁面上。
客戶反饋網(wǎng)站是一個(gè)簡單的網(wǎng)站。不幸的是,此網(wǎng)站容易遭受 JavaScript 注入攻擊。
假設(shè)正在將以下文本輸入到客戶反饋表單中:
<script>alert(“Boo!”)</script>
此文本表示顯示警告消息框的 JavaScript 腳本。在某人將此腳本提交到客戶反饋表單后,消息 Boo! 會在將來任何人訪問客戶反饋網(wǎng)站時(shí)顯示的攻擊。您可能還認(rèn)為別人不會通過 JavaScript 注入攻擊搞破壞。
現(xiàn)在,您對 JavaScript 注入攻擊的第一反應(yīng)也許是不理會。您可能認(rèn)為 JavaScript 注入攻擊不過是一種無傷大雅,不幸的是,黑客會通過在網(wǎng)站中注入 JavaScript 進(jìn)行破壞活動(dòng)。使用 JavaScript 注入攻擊可以執(zhí)行跨站腳本 (XSS) 攻擊。在跨站腳本攻擊中,可以竊取保密的用戶信息并將信息發(fā)送到另一個(gè)網(wǎng)站。
例如,黑客可以使用 JavaScript 注入攻擊竊取來自其他用戶瀏覽器的 Cookies 值。如果將敏感信息(如密碼、信用卡帳號或社會保險(xiǎn)號碼)保存在瀏覽器 Cookies 中,那么黑客可以使用 JavaScript 注入攻擊竊取這些信息。或者,如果用戶將敏感信息輸入到頁面的表單字段中,而頁面受到 JavaScript 攻擊的危害,那么黑客可以使用注入的 JavaScript 獲取表單數(shù)據(jù)并將其發(fā)送到另一個(gè)網(wǎng)站。
請高度重視。認(rèn)真對待 JavaScript 注入攻擊并保護(hù)用戶的保密信息。在接下來的兩部分中,我們將討論防止 ASP.NET MVC 應(yīng)用程序受到 JavaScript 注入攻擊的兩種技術(shù)。
方法 1:視圖中的 HTML 編碼
阻止 JavaScript 注入攻擊的一種簡單方法是重新在視圖中顯示數(shù)據(jù)時(shí),用 HTML 編碼任何網(wǎng)站用戶輸入的數(shù)據(jù)
如:<%=Html.Encode(feedback.Message)%>
使用 HTML 編碼一個(gè)字符串的含意是什么呢?使用 HTML 編碼字符串時(shí),危險(xiǎn)字符如 < 和 > 被替換為 HTML 實(shí)體,如 < 和 >。所以,當(dāng)使用 HTML 編碼字符串 <script>alert(“Boo!”)</script>時(shí),它將轉(zhuǎn)換為 <script>alert(“Boo!”)</script>。瀏覽器在解析編碼的字符串時(shí)不再執(zhí)行 JavaScript 腳本。而是顯示無害的頁面
方法 2:寫入數(shù)據(jù)庫之前的 HTML 編碼
除了在視圖中顯示數(shù)據(jù)時(shí)使用 HTML 編碼數(shù)據(jù),還可以在將數(shù)據(jù)提交到數(shù)據(jù)庫之前使用 HTML 編碼數(shù)據(jù)。第二種方法正是程序清單 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 的值在提交到數(shù)據(jù)庫之前是在 Create() 操作中經(jīng)過 HTML 編碼的。當(dāng)在視圖中重新顯示 Message 時(shí),Message 被 HTML 編碼,因而不會執(zhí)行任何注入到 Message 中的 JavaScript。
總結(jié)
通常,人們喜歡使用本教程中討論的第一種方法,而不喜歡使用第二種方法。第二種方法的問題在于在數(shù)據(jù)庫中最終會保留 HTML 編碼的數(shù)據(jù)。換言之,數(shù)據(jù)庫中的數(shù)據(jù)會包含奇怪的字符。這有什么壞處呢?如果需要用除網(wǎng)頁以外的形式顯示數(shù)據(jù)庫數(shù)據(jù),則將遇到問題。例如,不能輕易在 Windows Forms 應(yīng)用程序中顯示數(shù)據(jù)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript設(shè)置頁面背景色及背景圖片的方法
這篇文章主要介紹了javascript設(shè)置頁面背景色及背景圖片的方法,涉及JavaScript動(dòng)態(tài)操作頁面元素屬性的相關(guān)技巧,需要的朋友可以參考下2015-12-12H5跳轉(zhuǎn)小程序按鈕不顯示(wx-open-launch-weapp)踩坑指南
這篇文章主要給大家介紹了關(guān)于H5跳轉(zhuǎn)小程序按鈕不顯示(wx-open-launch-weapp)踩坑的相關(guān)資料,文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02關(guān)于預(yù)加載InstantClick的問題解決方法
本篇文章主要介紹了關(guān)于預(yù)加載InstantClick的問題解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09js實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾動(dòng)到最底部示例代碼
這篇文章主要給大家介紹了關(guān)于js實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾動(dòng)到最底部的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-06-06javascript中的prototype屬性使用說明(函數(shù)功能擴(kuò)展)
一說到prototype很多人可能第一個(gè)想到的是著名的prototype.js框架,當(dāng)然我們今天說的不是它,而是Javascript中的prototype屬性,一般都被翻譯為“原型”。2010-08-08