怎麼防止別人js程式碼攻擊
什麼是XSS
js程式碼攻擊也就是XSS(Cross Site Scripting)攻擊,全稱為跨站指令碼攻擊。為了和CSS(Cascading Style Sheet)區分,故稱為XSS。
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令程式碼到網頁,使使用者載入並執行攻擊者惡意製造的網頁程式。這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到更高的許可權(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。
xss攻擊的種類
1、持續型XSS攻擊:惡意指令碼來源於網站的資料庫
我們來看這種攻擊的一個場景
1、攻擊者通過評論表單提交將
<script>alert(‘aaa’)</script>
提交到網站
2、網站後端對提交的評論資料不做任何操作,直接儲存到資料庫中
3、其他使用者訪問正常訪問網站,並且需要請求網站的評論資料
4、網站後端會從資料庫中取出資料,直接返回給使用者
5、使用者得到頁面後,直接執行攻擊者提交的程式碼<script>alert(‘aaa’)</script>
,所有使用者都會在網頁中彈出aaa的彈窗
這種攻擊方式惡意程式碼會被儲存在資料庫中,其他使用者在正常訪問的情況下,也有會被攻擊,影響的範圍比較大
2、反射型XSS攻擊:惡意指令碼來源於受害者的請求
在一個反射型XSS攻擊中,惡意文字屬於受害者傳送給網站的請求中的一部分。隨後網站又把惡意文字包含進用於響應使用者的返回頁面中,發還給使用者。
1、使用者誤點開了帶攻擊的
url :http://xxx?keyword=<script>alert('aaa')</script>
2、網站給受害者的返回中包含了來自URL的的惡意文字
3、使用者的瀏覽器收到文字後執行頁面,會在網頁中彈窗aaa
反射型的攻擊需要使用者主動的去訪問帶攻擊的連結,攻擊者可以通過郵件或者簡訊的形式,誘導受害者點開連結。如果攻擊者配合短連結URL,攻擊成功的概率會更高
3、基於DOM的XSS攻擊
基於DOM的XSS攻擊是反射型攻擊的變種。伺服器返回的頁面是正常的,只是我們在頁面執行js的過程中,會把攻擊程式碼植入到頁面中
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。
總結
在日常的開發過程中,我們對於使用者的輸入嵌入到頁面中要格外小心,根據嵌入內容的上下文,採取不同的防範策略,提高我們頁面的安全性