如何避免JavaScript 注入攻擊?
什麼是 JavaScript 注入攻擊?
每當接受使用者輸入的內容並重新顯示這些內容時,網站就很容易遭受 JavaScript 注入攻擊。假設已經建立了一個客戶反饋網站。客戶可以訪問網站並輸入對產品的反饋資訊。當客戶提交反饋時,反饋資訊重新顯示在反饋頁面上。客戶反饋網站是一個簡單的網站。不幸的是,此網站容易遭受 JavaScript 注入攻擊。
假設使用者正在將以下文字輸入到客戶反饋表單中:
<script>alert(“Boo!”)</script>
那這段文字在顯示的時候會在頁面上彈出一個訊息框,以後任何人在訪問這個網站的時候,在顯示使用者的反饋資訊時都會彈出這個對話方塊。
可能你對上面的JavaScript注入感覺沒什麼大不了的,好像它只能對我們的介面顯示產生影響,它並不會給我們的網站的安全性還來真正可怕的影響。不幸的是,一個黑客足可以使用JavaScript攻擊來給你的網站帶來可怕的事情。它可以使用JavaScript注入執行Cross-Site Scripting攻擊。Cross-Site Scripting攻擊就是盜竊用來的機密資訊併發送到別的網站上去。比如:黑客可以使用JavaScript注入攻擊從客戶機的Cookie中盜取敏感資訊(密碼、信用卡號、社保賬號等),或者把其它使用者表單中輸入的機密資料傳送到其它網站上去。
解決方法一:檢視中的 HTML 編碼
防止JavaScript注入攻擊的一個簡單方法就是當顯示使用者輸入的資料時,使用Html.Encode()方法把資料庫中的資料編碼顯示。
如:<%=Html.Encode(feedback.Message)%>
使用 Html.Encode()方法編碼字串時,它會把一些危險字元給轉義掉。所以,當使用Html.Encode()方法編碼字串 時,它將轉換為 :
<script>alert(“Boo!”)</script>
瀏覽器在解析編碼的字串時不再執行 JavaScript 指令碼。而是顯示無害的頁面。
解決方法二:寫入資料庫之前的 HTML 編碼
除了在檢視中顯示資料時使用 HTML 編碼資料,還可以在將資料提交到資料庫之前使用 HTML 編碼資料。第二種方法正是程式清單中 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 應用程式中顯示資料。
相關推薦
如何避免JavaScript 注入攻擊?
什麼是 JavaScript 注入攻擊? 每當接受使用者輸入的內容並重新顯示這些內容時,網站就很容易遭受 JavaScript 注入攻擊。假設已經建立了一個客戶反饋網站。客戶可以訪問網站並輸入對產品的反饋資訊。當客戶提交反饋時,反饋資訊重新顯示在反饋頁面上。客戶
dljd_013_使用PreparedStatement避免SQL注入攻擊
一、使用PreparedStatement來避免SQL注入攻擊示例 這裡我只提供原始碼、測試類及結果截圖資訊、建庫/表的語句詳見上一集 package edu.aeon.logon; import java.sql.Connection; import java.sql.Prepared
淺談html轉義及防止javascript注入攻擊
有的時候頁面中會有一個輸入框,使用者輸入內容後會顯示在頁面中,類似於網頁聊天應用。如果使用者輸入了一段js指令碼,比例:<script>alert('test');</script>,頁面會彈出一個對話方塊,或者輸入的指令碼中有改變頁面js變數的程
JS轉換HTML轉義符,防止javascript注入攻擊,親測可用
//去掉html標籤 1 2 3 function removeHtmlTab(tab) { return tab.replace(/<[^<>]+?>/g,'');//刪除所有HTML標籤 } //普通字元轉換
解決html轉義及防止javascript注入攻擊
第一種:value="${wcrActivity.activityTitle.replace(/</g,'<').replace(/>/g,'>').repla
防止javascript 注入攻擊 js過濾特殊字元
//匹配中文 數字 字母 下劃線 var checkInput = function (str) { var pattern = /^[\w\u4e00-\u9fa5]+$/gi; if(pattern.test(c)) { return false;
javascript注入攻擊及防止方法
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="CustomerFeedback.Views.Ho
MyBatis中避免注入攻擊
直接使用 JDBC 的場景,如果程式碼中存在拼接 SQL 語句,那麼很有可能會產生注入,如 String sql = "SELECT * FROM users WHERE name ='"+ name + "'"; Statement stmt = connection.createStatement
asp中用正則表示式過濾字元,避免注入攻擊
Pattern 屬性的用法: Function RegExpTest(patrn, strng) Dim regEx ' 建立變數。 Set regEx = New RegExp ' 建立正則表示式。 regEx.Pattern = patrn ' 設定模式。 regEx.IgnoreCase = True
用WiFi時如何避免被黑客攻擊
ddos 大金ddos互聯網時代,什麽最重要?是WiFi,還是寬帶?都不對,交電費最重要。開個玩笑。確實,日常生活中大家已經離不開WiFi了吧?WiFi的好處無需贅言,但是相應的,它的危險性也值得我們商榷。那麽,該如何保證自己的安全呢?1.免費WiFi慎用 ddos網頁端 ddos ddos攻擊 www
滲透測試:SQL注入攻擊(ASP)
分類: 滲透測試 SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。
Java程式設計師從笨鳥到菜鳥之(一百)sql注入攻擊詳解(一)sql注入原理詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
SQL注入攻擊及危害
SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫
sql注入攻擊和PreparedStatement有效防止sql注入攻擊
【1】sql注入攻擊: /** * SQL 注入. */ @Test public void testSQLInjection() { String username = "a' OR PASSWORD = "; String password = " OR '1'='1
HTML轉義以及防止JS注入攻擊
目的 這周在開發即時聊天的時候,發生存在JS注入攻擊的問題。如果使用者輸入了一段js指令碼。 例如: <script>alert('我進來了');</script> 頁面會彈出一個對話方塊,或者輸入的指令碼中有改變頁面js變數的程式碼則會時程式
SQL注入攻擊原理與幾種防禦方式
一、SQL注入簡介 SQL注入是比較常見的網路攻擊方式之一,它不是利用作業系統的BUG來實現攻擊,而是針對程式設計師程式設計時的疏忽,通過SQL語句,實現無帳號登入,甚至篡改資料庫。 二、SQL注入攻擊的總體思路 1.尋找到SQL注入的位置 2.判斷伺服器型別和後臺
jdbc_012_使用jdbc操作實現登入操作並且演示SQL注入攻擊
一、建庫及表語句(簡單測試) drop database db_test; create database db_test; use db_test; create table user( userId int(5) primary key comment '使用者id',
html轉譯及防止js指令碼注入攻擊的方法
js指令碼攻擊 有的時候頁面中會有一個輸入框,使用者輸入內容後會顯示在頁面中,類似於網頁聊天應用,留言板等。如果使用者輸入了一段js指令碼,比例:,頁面會彈出一個對話方塊,或者輸入的指令碼中有改變頁面js變數的程式碼則會時程式異常或者達到跳過某種驗證的目的。那如何防止這種惡意的js指令碼
web安全/滲透測試--23--XML注入攻擊
1、漏洞描述: 可擴充套件標記語言(Extensible Markup Language, XML),用於標記電子檔案使其具有結構性的標記語言,可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。XML是標準通用標記語言(SGML
HTML轉義字元防止js程式碼注入攻擊
什麼是js注入攻擊 有的時候頁面中會有一個輸入框,使用者輸入內容後會顯示在頁面中,類似於網頁聊天應用。如果使用者輸入了一段js指令碼,比例:,頁面會彈出一個對話方塊,或者輸入的指令碼中有改變頁面js變數的程式碼則會時程式異常或者達到跳過某種驗證的目的 什麼是ht