記錄下最近有關於安全問題的學習,主要從XSS,CSRF,HTTPS,CSP,SRI,頁面劫持幾個方面來講前端
跨域腳本攻擊(cross-site scripting)
錯誤地將用戶輸入的內容當作了代碼的一部分進行執行後端
對於後端渲染:
一、HTML標籤內容轉義
二、內聯JavaScript轉義
三、URL轉義跨域
對於前端渲染:
一、使用專業框架規避XSS風險
二、使用.innerHTML/.outerHTML/document.write注意Encode
三、拼接字符串做爲代碼執行時注意Encode
四、儘可能不使用setTimeout(字符串)/new Function/eval瀏覽器
跨站請求僞造
攻擊者誘導受害者進入第三方網站
在第三方網站中向被攻擊網站發送跨站請求
利用受害者在被攻擊網站已經獲取的登陸態,冒充用戶對被攻擊的網站執行某項操做安全
Set-Cookie: foo=1; Samesite=Strict
Set-Cookie: foo=1; Samesite=Lax
複製代碼
嚴格模式: 任何狀況的跨站請求都不會攜帶該Cookie
寬鬆模式: 形成頁面刷新且是GET請求才會攜帶該Cookiebash
嚴格模式重新標籤進入/打開子域頁面都會丟失登陸態,用戶體驗較差
寬鬆模式安全性較低Samesite不支持子域,且目前兼容性較差
複製代碼
防止僞造
使用CSRF Token
服務端輸出CSRF Token到頁面
頁面在發起請求時攜帶CSRF Token
服務端收到請求時同時校驗CSRF Token和登陸態服務器
隱藏令牌
和Token有點像,好比說放在HTTP的header頭中,不放在連接上,這樣子會比較隱蔽,本質差很少,只是使用方式有所差異。cookie
其實就是被誤導跑到別的地方去了,好比經常在一些電影資源網站點擊播放的時候跳到貪玩藍嶽的頁面之類的。併發
防止頁面被放入iframe
1.使用JS代碼判斷 判斷當前parent是否爲top
window.top === window.parent
框架
2.X-Frame-Options 指示瀏覽器是否容許該頁面被放入frame/iframe/embed/object
X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/
複製代碼
HTTPS = HTTP + SSL/TLS
HTTP Strict-Transport-Security
使用HTTP訪問時強制使用HTTPS 第一次成功HTTPS訪問後返回HSTS響應頭 之後max-age時間內瀏覽器均會內部307到HTTPS站點
Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]
HSTS Preload
向谷歌提交HTTPS預加載列表
獲取不通過第一次HTTPS的強行調整
Content Security Policy
內容安全策略
用於檢測/阻止/削弱某類攻擊
使用HTTP Header/meta進行配置
跨站腳本攻擊
CSP 的主要目標是減小和報告 XSS 攻擊 ,XSS 攻擊利用了瀏覽器對於從服務器所獲取的內容的信任。惡意腳本在受害者的瀏覽器中得以運行,由於瀏覽器信任其內容來源,即便有的時候這些腳本並不是來自於它本該來的地方。
CSP經過指定有效域——即瀏覽器承認的可執行腳本的有效來源——使服務器管理者有能力減小或消除XSS攻擊所依賴的載體。一個CSP兼容的瀏覽器將會僅執行從白名單域獲取到的腳本文件,忽略全部的其餘腳本 (包括內聯腳本和HTML的事件處理屬性)。
做爲一種終極防禦形式,始終不容許執行腳本的站點能夠選擇全面禁止腳本執行
數據包嗅探攻擊
除限制能夠加載內容的域,服務器還可指明哪一種協議容許使用;好比 (從理想化的安全角度來講),服務器可指定全部內容必須經過HTTPS加載。一個完整的數據安全傳輸策略不只強制使用HTTPS進行數據傳輸,也爲全部的cookie標記安全標識 cookies with the secure flag,而且提供自動的重定向使得HTTP頁面導向HTTPS版本。網站也可使用 Strict-Transport-Security HTTP頭部確保鏈接它的瀏覽器只使用加密通道。
Content-Security-Policy: default-src 'self'
複製代碼
Content-Security-Policy: default-src 'self' *.trusted.com
複製代碼
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com
複製代碼
子資源完整性 Subresource Integrity 簡稱 SRI 是一種安全機制,它用於讓瀏覽器檢查所下載的來自第三方的資源(例如 CDN)未被惡意篡改。它使用哈希值檢查確保第三方資源的完整性。只要開發者提供了被需下載資源的哈希值,瀏覽器就能夠檢查實際下載的文件是否與預期的哈希值匹配。
Content-Security-Policy: require-sri-for script;
Content-Security-Policy: require-sri-for style;