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。