1. 程式人生 > >如何避免JavaScript 注入攻擊?

如何避免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()方法編碼字串 時,它將轉換為 :

&lt;script&gt;alert(“Boo!”)&lt;/script&gt;

瀏覽器在解析編碼的字串時不再執行 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,'&lt;').replace(/>/g,'&gt;').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