1. 程式人生 > >怎麼防止別人js程式碼攻擊

怎麼防止別人js程式碼攻擊

什麼是XSS

js程式碼攻擊也就是XSS(Cross Site Scripting)攻擊,全稱為跨站指令碼攻擊。為了和CSS(Cascading Style Sheet)區分,故稱為XSS。
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令程式碼到網頁,使使用者載入並執行攻擊者惡意製造的網頁程式。這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到更高的許可權(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。

xss攻擊的種類

1、持續型XSS攻擊:惡意指令碼來源於網站的資料庫


我們來看這種攻擊的一個場景
例1
1、攻擊者通過評論表單提交將<script>alert(‘aaa’)</script>提交到網站

2、網站後端對提交的評論資料不做任何操作,直接儲存到資料庫中

3、其他使用者訪問正常訪問網站,並且需要請求網站的評論資料

4、網站後端會從資料庫中取出資料,直接返回給使用者

5、使用者得到頁面後,直接執行攻擊者提交的程式碼<script>alert(‘aaa’)</script>,所有使用者都會在網頁中彈出aaa的彈窗

這種攻擊方式惡意程式碼會被儲存在資料庫中,其他使用者在正常訪問的情況下,也有會被攻擊,影響的範圍比較大

2、反射型XSS攻擊:惡意指令碼來源於受害者的請求


在一個反射型XSS攻擊中,惡意文字屬於受害者傳送給網站的請求中的一部分。隨後網站又把惡意文字包含進用於響應使用者的返回頁面中,發還給使用者。
例2
1、使用者誤點開了帶攻擊的url :http://xxx?keyword=<script>alert('aaa')</script>

2、網站給受害者的返回中包含了來自URL的的惡意文字

3、使用者的瀏覽器收到文字後執行頁面,會在網頁中彈窗aaa

反射型的攻擊需要使用者主動的去訪問帶攻擊的連結,攻擊者可以通過郵件或者簡訊的形式,誘導受害者點開連結。如果攻擊者配合短連結URL,攻擊成功的概率會更高

3、基於DOM的XSS攻擊

基於DOM的XSS攻擊是反射型攻擊的變種。伺服器返回的頁面是正常的,只是我們在頁面執行js的過程中,會把攻擊程式碼植入到頁面中
例3


1、使用者誤點開了帶攻擊的url :http://xxx?name=<script>alert('aaa')</script>

2、網站給受害者的返回中正常的網頁

3、使用者的瀏覽器收到文字後執行頁面合法指令碼,這時候頁面惡意指令碼會被執行,會在網頁中彈窗aaa

這種攻擊方式發生在我們合法的js執行中,伺服器無法檢測我們的請求是否有攻擊的危險

規避方法

過濾特殊字元
避免XSS的方法之一主要是將使用者所提供的內容進行過濾,許多語言都有提供對HTML的過濾:

  • PHP的htmlentities()或是htmlspecialchars()。
  • Python的cgi.escape()。
  • ASP的Server.HTMLEncode()。
  • ASP.NET的Server.HtmlEncode()或功能更強的Microsoft Anti-Cross Site Scripting Library
  • Java的xssprotect (Open Source Library)。
  • Node.js的node-validator。

使用HTTP頭指定型別
很多時候可以使用HTTP頭指定內容的型別,使得輸出的內容避免被作為HTML解析。如在PHP語言中使用以下程式碼:

<?php
   header('Content-Type: text/javascript; charset=utf-8');
?>

即可強行指定輸出內容為文字/JavaScript指令碼(順便指定了內容編碼),而非可以引發攻擊的HTML。

總結

在日常的開發過程中,我們對於使用者的輸入嵌入到頁面中要格外小心,根據嵌入內容的上下文,採取不同的防範策略,提高我們頁面的安全性