一、前端 XSS
XSS
,全稱爲Cross Site Scripting
,跨站腳本攻擊。XSS
攻擊原理是 程序 + 數據 = 結果。Scripting
是可以獲取頁面數據、獲取Cookies
、劫持前端邏輯、發送請求,所以就可以偷取網站任意數據、偷取用戶資料、偷取用戶密碼和登錄態、欺騙用戶等等。XSS
攻擊分類爲反射型和存儲型。反射型是url
參數直接注入,存儲型是存儲到DB
後讀取時注入。XSS
攻擊注入點是有HTML
節點內容、HTML
屬性、JavaScript
代碼和富文本等。- 瀏覽器自帶防禦,參數出現在
HTML
內容或屬性。對於JavaScript
代碼,轉義'\'
或者轉換成json
。 - 富文本,按白名單保留部分標籤和屬性,也可以使用
js-xss
這個第三方庫。 CSP
,全稱爲Content Security Policy
,內容安全策略,用於指定哪些內容可執行。PHP
中防禦XSS
,可以使用內置函數轉義、DOM
解析白名單、第三方庫和CSP
等等。
二、前端 CSRF
CSRF
,全稱爲Cross Site Request Forgy
,跨站請求僞造。CSRF
攻擊原理,用戶登錄A
網站,A
網站確認身份,B
網站頁面帶A
網站身份向A
網站發起請求。CSRF
攻擊的危害是利用用戶登錄態、用戶不知情、完成業務請求,所以盜取用戶資金進行轉賬和消費、冒充用戶發帖背鍋、損害網站名譽等等。CSRF
攻擊防禦,B
網站向A
網站請求,帶A
網站Cookies
,不訪問A
網站前端,訪問後端,referer
爲B
網站。對此,需要禁止第三方網站帶Cookies
,以及需要設置same-site
屬性。- 對於不訪問
A
網站前端,可以在前端頁面加入驗證信息、驗證碼和token
等等。 - 對於
referer
爲B
網站,可以驗證referer
和 禁止來自第三方網站的請求。 PHP
防禦CSRF
,可以使用Cookie samesite
屬性、HTTP referer
頭 和token
。
三、前端 Cookies
Cookies
的特性是前端數據存儲,後端通過http
頭設置,請求時通過http
頭傳給後端,前端可讀寫和遵守同源策略。同時,也是有域名、有效期、路徑、http-only
和secure
。Cookies
的作用是存儲個性化設置,存儲未登錄時用戶唯一標識,存儲已登錄用戶的憑證和存儲其它業務數據。Cookies
的登錄用戶憑證是前端提交用戶名和密碼,後端驗證用戶名和密碼,後端通過http
頭設置用戶憑證。對此,登錄用戶憑證可以是用戶ID
、用戶ID
+簽名 和SessionId
。Cookies
和XSS
的關係,XSS
可能偷取Cookies
,http-only
的Cookie
不會被偷。Cookies
和CSRF
的關係,CSRF
利用了用戶Cookies
,攻擊站點無法讀取Cookies
,最好能阻止第三方使用Cookies
。Cookies
安全案例,比如某學習教務系統使用了開源CMS
,該CMS
使用username
作爲唯一用戶標識,該CMS
文章作者暴露了username
,可以使用任意username
登錄後臺。還比如,某論壇使用了某開源ASP BBS
程序,該ASP
程序使用用戶ID
作爲用戶標識,可以僞造任意用戶登錄。Cookies
安全策略是簽名防篡改、私有變化加密、http-only
去防止XSS
、secure
和same-site
。
四、點擊劫持
- 點擊劫持的危害是用戶親手操作、用戶不知情,所以就盜取用戶資金轉賬、獲取用戶敏感信息。
- 點擊劫持防禦,可以使用
JavaScript
禁止內嵌,X-FRAME-OPTIONS
禁止內嵌以及其他輔助手段等。