文章目錄
WEB前後端漏洞分析與防禦技巧–第一部分
第一章 前端XSS
XSS攻擊分類
XSS攻擊注入點
- HTML節點內容
- HTML屬性
- JavaScript代碼
- 富文本
瀏覽器自帶防禦:header中增加X-XSS-Protection:1。非常有限的手段,此方案只能防禦出現在html內容或屬性中的反射性XSS。
HTML節點內容和屬性的防禦
JavaScript代碼的防禦
轉義相關字符:
注意:上面的方法並不保險,推薦直接使用json.Encode等方法將JS代碼轉義爲json格式
富文本的防禦
按白名單保留部分標籤和屬性
CSP(Content Security Policy)
- 內容安全策略
- 用於指定哪些內容可執行
ctx.set(`Content-Security-Policy`, `default-src 'self'`)
XSS防禦總結
- 內置函數轉義
- DOM解析白名單
- 第三方庫,node的xss庫等
- CSP
第二章 前端CSRF
Cross Site Request Forgy(跨站請求僞造)
CSRF攻擊危害
- 利用用戶登錄態
- 用戶不知情
- 完成業務請求
- 盜取用戶資金
- 冒充用戶發帖
- 損壞網站名譽
CSFR攻擊防禦
- 禁止第三方網站帶Cookies
- same-site屬性(目前支持的瀏覽器很少)
- same-site屬性(目前支持的瀏覽器很少)
不訪問A網站前端
- 在前端頁面加入驗證信息
- 驗證碼(前後端都需要改造)
- 因爲攻擊者無法知道驗證碼的內容,所以可以保證安全
- token
- 後端在cookies中設置token,並在前端提交表單的頁面的隱藏域中存儲提交表單需要帶上的token,然後在後端校驗此token是否和cookies中的一致。由於CSRF攻擊者不瞭解cookie中token字段具體的值,可以很大程度上防止CSRF攻擊。
referer爲B網站
- 驗證referer
- 禁止來自第三方網站的請求
注意:這裏驗證referer時在正則表達式中需要加上"^http://xxxxxx.com/",最後的這個斜槓一定不能少,以免其他網站申請”http://xxxxxx.com.attack/“這樣的域名去進行攻擊
第三章 前端Cookies問題
Cookies特性
- 前端數據存儲
- 後端通過http頭設置
- 請求時通過http頭傳給後端
- 前端可讀寫
- 遵守同源策略
Cookies作用
- 存儲個性化設置
- 存儲未登錄時用戶唯一標識
- 存儲已登錄用戶的憑證
- 存儲其他業務數據
Cookies-登錄用戶憑證
- 前端提交用戶名密碼
- 後端驗證用戶名密碼
- 後端通過http頭設置用戶憑證
- 後續訪問時後端先驗證用戶憑證
設置用戶憑證的方法
- 用戶ID (不安全)
- 用戶ID + 簽名 (防篡改)
- SessionId (推薦,注意:這裏也可以使用SessionId+簽名的方式預防CSRF攻擊,此時使用此簽名作爲token)
Cookies和XSS的關係
- xss可能偷取Cookies
- http-only的Cookies不會被偷
Cookies和CSRF的關係
- CSRF利用了目標的cookies
- 攻擊站點無法讀寫Cookies
- 最好能阻止第三方使用Cookies(same-site,但是目前兼容的瀏覽器不多)
Cookies-安全策略
- 簽名防篡改
- 私有變換(加密),避免cookie篡改和信息泄露
- 加密:
- 解密:
- http-only(防止XSS)
- secure(僅在https中使用,防止傳輸過程中的竊聽)
- same-site
第四章 前端點擊劫持問題
- 用戶親手操作
- 用戶不知情
- 盜取用戶資金(轉賬,消費)
- 獲取用戶敏感信息
點擊劫持防禦
攻擊原理:使用iframe內嵌其他網站,並將透明度設爲0,然後附在其他網站中,引誘用戶點擊
- JavaScript禁止內嵌(不能100%解決,使用sandbox就不行了)
- X-FRAME-OPTIONS(HTTP頭)禁止內嵌(推薦,支持IE8以上)
- 其他輔助手段(例如驗證碼等)