從鬍子的長度和憂鬱的眼神我察覺到,面前坐著的這位面試官應該有點東西。
渾身上下流露著打過CTF的氣場。我像以往一樣,準備花3分鐘的時間進行自我介紹。在此期間,面試官面無表情但很有耐心的聽著我bilibala。
我按照原定計劃順利地介紹(吹)完自己的專案經驗,面試官露出了一絲淡淡的微笑看著我說:
你覺得自己最擅長的是什麼?
(我淡淡的回應道:雖然是一名前端工程師,但是我對web安全很感興趣。)
0.CIA三元組知道嗎?
- 機密性(
Confidentiality
) - 完整性(
Integrity
) - 可用性(
Availability
)
(這三個東西一定要回答的乾淨利落,不假思索)
1.XSS攻擊是如何產生的?
黑客在你的瀏覽器中插入一段惡意 JavaScript
指令碼,竊取你的隱私資訊、冒充你的身份進行操作。這就是 XSS 攻擊(Cross-Site Scripting
,跨站指令碼攻擊)
因為瀏覽器無法區分指令碼是被惡意注入的還是正常的內容,它都會執行,況且 HTML
非常靈活,可以在任何時候對它進行修改。
2.知道XSS有哪幾種型別嗎?
(送分題)
- 反射型 XSS (也叫非持久型)
- 基於 DOM 的 XSS
- 儲存型 XSS (也叫持久型 XSS)
3.分別說一下它們的實現原理
反射型
:顧名思義,惡意 JavaScript
指令碼屬於使用者傳送給網站請求中的一部分,隨後網站又將這部分返回給使用者,惡意指令碼在頁面中被執行。一般發生在前後端一體的應用中,服務端邏輯會改變最終的網頁程式碼。
基於DOM型
:目前更流行前後端分離的專案,反射型 XSS 無用武之地。
但這種攻擊不需要經過伺服器,我們知道,網頁本身的 JavaScript
也是可以改變 HTML
的,黑客正是利用這一點來實現插入惡意指令碼。
儲存型
:又叫持久型 XSS,顧名思義,黑客將惡意 JavaScript
指令碼長期儲存在服務端資料庫中,使用者一旦訪問相關頁面資料,惡意指令碼就會被執行。常見於搜尋、微博、社群貼吧評論等。
4.說一說它們之間的區別
反射型的 XSS
的惡意指令碼存在 URL
裡,儲存型 XSS
的惡意程式碼存在資料庫裡。
而基於DOM型的XSS
攻擊中,取出和執行惡意程式碼由瀏覽器端完成,屬於前端 JavaScript
自身的安全漏洞,其他兩種 XSS
都屬於服務端的安全漏洞。
(面試官微微抬起頭,遞給我一張紙。)
5.再畫個圖解釋一下把
(好的,給你降維解釋一波)
反射型
基於DOM型
儲存型
(面試官:小夥子圖畫的不錯)
6.黑客可以通過XSS攻擊做哪些事兒?
- 盜取使用者 Cookie
- 未授權操作
- 修改 DOM
- 刷浮窗廣告
- 發動 XSS 蠕蟲攻擊
- 劫持使用者行為,進一步滲透內網
(...太多了)
7.XSS攻擊如何進行防護?
- 一切使用者輸入皆不可信,
在輸出時進行驗證
- 將
HTML 元素內容、屬性以及 URL 請求引數、CSS 值進行編碼
- 當編碼影響業務時,使用
白名單規則進行檢測和過濾
- 使用 W3C 提出的
CSP (Content Security Policy,內容安全策略)
,定義域名白名單 - 設定
Cookie 的 HttpOnly
屬性
8.知道哪些XSS攻擊案例簡單說一下
(沒想到你還愛聽新聞)
- 2005年,年僅19歲的 Samy Kamkar 發起了對 MySpace.com 的 XSS Worm 攻擊。
Samy Kamkar 的蠕蟲在短短几小時內就感染了100萬使用者——它在每個使用者的自我簡介後邊加了一句話:“but most of all, Samy is my hero.”(Samy是我的偶像)。這是 Web 安全史上第一個重量級的 XSS Worm,具有里程碑意義。 - 2007年12月,百度空間收到蠕蟲攻擊,使用者之間開始轉發垃圾短訊息。
- QQ 郵箱 m.exmail.qq.com 域名被發現反射型 XSS 漏洞
- 2011年新浪微博曾被黑客 XSS 攻擊,黑客誘導使用者點選一個帶有誘惑性的連結,便會自動傳送一條帶有同樣誘惑性連結微博。攻擊範圍層層擴大,也是一種蠕蟲攻擊。
9.什麼是CSRF攻擊?
CSRF 英文全稱是 Cross-site request forgery
,又稱為“跨站請求偽造”。
顧名思義,CSRF 攻擊就是黑客引誘使用者開啟黑客的網站,利用使用者的登陸狀態發起跨站請求。
降維解釋:攻擊者誘導受害者進入第三方網站,在第三方網站中,向被攻擊網站傳送跨站請求。
利用受害者在被攻擊網站已經獲取的註冊憑證,繞過後臺的使用者驗證, 達到冒充使用者對被攻擊的網站執行某項操作的目的。
10.CSRF攻擊一般怎麼實現?
- 最容易實現的是
Get
請求,一般進入黑客網站後,可以通過設定img
的src
屬性來自動發起請求 - 在黑客的網站中,構造隱藏表單來自動發起
Post
請求 - 通過引誘連結誘惑使用者點選觸發請求,利用
a
標籤的href
。
[點選下載美女視訊]()
11.CSRF攻擊和XSS攻擊有什麼區別?
CSRF 攻擊不需要將惡意程式碼注入使用者的頁面,僅僅是利用伺服器的漏洞和使用者的登入狀態來實施攻擊。
CSRF 攻擊成本也比 XSS 低,使用者每天都要訪問大量網頁,無法確認每一個網頁的合法性,
從使用者角度來說,無法徹底防止 CSRF 攻擊。
12.那應該如何防範CSRF攻擊?
- 針對實際情況,設定關鍵 Cookie 的
SameSite
屬性為Strict
或Lax
- 服務端驗證請求來源站點(
Referer、Origin
) - 使用
CSRF Token
,服務端隨機生成返回給瀏覽器的 Token,每一次請求都會攜帶不同的 CSRF Token - 加入二次驗證(獨立的支付密碼)
13.關於Web密碼學你瞭解哪些呢?
-
對稱加密演算法
- 對稱加密演算法就是加密和解密使用同一個金鑰,簡單粗暴
- 常見的經典對稱加密演算法有
DES、AES(AES-128)、IDEA、國密SM1、國密SM4
-
非對稱加密演算法
- 非對稱加密就是加密和解密使用不同的金鑰。傳送方使用公鑰對資訊進行加密,接收方收到密文後,使用私鑰進行解密。
- 主要解決了金鑰分發的難題
- 我們常說的簽名就是私鑰加密
- 常見的經典非對稱加密演算法有
RSA、ECC和國密SM2
-
雜湊演算法
- 不可逆性、魯棒性、唯一性
MD5、SHA(SHA-256)、國密SM3
- 使用時記得加鹽
AES
是國際上最認可的密碼學演算法,只要算力沒有極大的突破性進展,這種演算法在可預期的未來都是安全的。
ECC
是目前國際上加密強度最高的非對稱加密演算法。
MD5
和 SHA
的唯一性被破解了,但是大部分場景下,不會構成安全問題。一般使用 SHA-256 加鹽
即可滿足大部分使用場景。
14.簡單說一下HTTPS的實現原理
- Client 傳送
random1+對稱加密套件列表+非對稱加密套件列表
- Server 收到資訊, 選擇
對稱加密套件+非對稱加密套件 並和 random2+證照(公鑰在證照中)
一起返回 - Client 驗證證照有效性,並用
random1+random2 生成 pre-master 通過伺服器公鑰加密+瀏覽器確認
傳送給 Server - Server 收到 pre-master,
根據約定的加密演算法對 random1+random2+pre-master(解密)生成 master-secret,然後傳送伺服器確認
- Client 收到生成同樣的
master-secert
,對稱加密祕鑰傳輸完畢
(基操,勿6)
HTTPS 在 TCP 和 HTTP 中間加入了 SSL/TLS 安全層。
- 對發起 HTTP 請求的資料進行加密操作
- 對接收到 HTTP 的內容進行解密操作。
採用對稱加密的方式加密傳輸資料和非對稱加密的方式來傳輸金鑰,既可以解決傳輸效率問題也能保證兩端資料的安全傳輸。除此之外,為了能夠證明伺服器是可靠的,引入了數字證照,讓瀏覽器驗證證照的可靠性。
面試官拿起旁邊已經涼透的烏龍茶,喝了一口。
(小夥子,有點東西)
持續更新……
參考
- 白帽子講Web安全
- 瀏覽器工作原理與實踐
- 安全攻防技能30講