XSS攻擊是什麼?| 面試題

語言: CN / TW / HK

theme: smartblue

XSS攻擊是什麼?

要點: XSS是跨站腳本攻擊、向目標網站插入惡意代碼、大量用户訪問網站時運行惡意腳本獲取信息

答:

XSS是跨站腳本攻擊(Cross Site Scripting),不寫為CSS是為了避免和層疊樣式表(Cascading Style Sheets)的縮寫混淆,所以將跨站腳本攻擊寫為XSS。攻擊者可以通過向Web頁面裏面插入script代碼,當用户瀏覽這個頁面時,就會運行被插入的script代碼,達到攻擊者的目的。XSS的危害一般是泄露用户的登錄信息cookie,攻擊者可以通過cookie繞過登錄步驟直接進入站點。

XSS的分類分為反射型和存儲型

反射型就是臨時通過url訪問網站,網站服務端將惡意代碼從url中取出,拼接在HTML中返回給瀏覽器,用户就會執行惡意代碼。

存儲型就是將惡意代碼以留言的形式保存在服務器數據庫,任何訪問網站的人都會受到攻擊。

預防XSS攻擊的方案基本是對數據進行嚴格的輸出編碼,比如HTML元素的編碼,JavaScript編碼,css編碼,url編碼等等。


XSS的危害: - 獲取cookie:網站中的登錄一般都是用cookie作為某個用户的身份證明,這是服務器端返回的一串字符。如果cookie被攻擊者拿到,那麼就可以繞過密碼登錄。當空間、論壇如果可以被插入script代碼,那麼進入空間或者論壇的人的賬號就可以輕易被攻擊者獲取。 - 惡意跳轉:直接在頁面中插入window.location.href進行跳轉。

XSS的分類: - 反射型XSS(非持久型XSS):通過URL參數直接注入 - 存儲型XSS(持久型XSS):存儲到數據庫後讀取時注入 XSS的預防: - 瀏覽器的防禦和“X-XSS-Protection”有關,默認值為1,即默認打開XSS防禦,可以防禦反射型的XSS,不過作用有限,只能防禦注入到HTML的節點內容或屬性的XSS,例如URL參數中包含script標籤。不建議只依賴此防禦手段。 - 防禦HTML節點內容,通過轉義<為<以及>為>來實現防禦HTML節點內容。 - 預防HTML屬性,通過轉義"->&quto來實現防禦,一般不轉義空格,但是這要求屬性必須帶引號。 - 預防JavaScript代碼,通過將數據進行JSON序列化。 - 防禦富文本是比較複雜的工程,因為富文本可以包含HTML和script,這些難以預測與防禦,建議是通過白名單的方式來過濾允許的HTML標籤和標籤的屬性來進行防禦,大概的實現方式是: - - 將HTML代碼段轉成樹級結構的數據 - 遍歷樹的每一個節點,過濾節點的類型和屬性,或進行特殊處理 - - 處理完成後,將樹級結構轉化成HTML代碼 - 開啟瀏覽器XSS防禦:Http Only cookie,禁止 JavaScript 讀取某些敏感 Cookie,攻擊者完成XSS注入後也無法竊取此 Cookie。