前言:最近在學習前端安全,不知道從哪下手,因而在慕課網上看了找到了web安全視頻,整理了以下筆記!html
XSS攻擊,全稱Cross Site Scripting,跨站腳本攻擊。 跨站:全部運行的邏輯都必須是在本站,當非本站的腳本運行在本站爲跨站。前端
兩種方式:node
注入點:web
目前瀏覽器自帶防護,可是有限,瀏覽器默認X-XSS-Protection爲1,能夠攔截反射型,也就是url參數直接注入html節點內容和html屬性,但JavaScript代碼和富文本不會。算法
防範措施後端
// 轉義html
var escaprHtml = function(str){
if(!str) return '';
str = str.replace(/&/g, '&');
str = str.replace(/</g, '<');
str = str.replace(/>/g, '>');
str = str.replace(/"/g, '&quto;'); str = str.replace(/'/g, '''); // str = str.replace(/ /g, ' '); return str; } 複製代碼
// 轉義js可是不保險
var escaprJS = function(str){
if(!str) return '';
str = str.replace(/\\/g, '\\\\');
str = str.replace(/"/g, '\\"'); return str; } // JSON.stringfiy保險 JSON.stringfiy() 複製代碼
- 黑名單過濾,就是過濾到不準的標籤或者屬性,不安全,緣由是HTML標籤有不少,一不留神就容易有遺落
- 白名單過濾,富文本只容許哪些標籤和這些標籤帶有哪些屬性
XSS 插件瀏覽器
CSP(最有效的辦法)安全
CSP,全稱Content Security Policy,內容安全策略,用於指定哪些內容可執行,它是一個http頭。bash
`Content-Security-Policy`,`default-src 'self'`
複製代碼
幸運的是目前前端主流的框架已解決XSS攻擊,如:Vue、React、Angularcookie
CSRF攻擊,全稱Cross Site Request Forgy,跨站請求僞造。它的意思是在其它的網站對目標網站發送請求,而這些請求是在用戶不知情的狀況下完成的。它是發生在匿名的狀況下,第三方網站,帶上Cookies,向你的網站發送請求,不訪問你的前端。
攻擊原理
防範措施
- same-site屬性(兼容性很差,目前好像只有谷歌瀏覽器)
sameSite:"stirct"
複製代碼
- 驗證碼(用戶體驗差)
- token
- 驗證referer
cookies特性
- 前端數據存儲
- 後端經過http頭設置
- 請求時經過http頭傳給後端
- 前端可讀寫
- 遵照同源策略(協議、域名、端口所有一致)
Cookies和XSS攻擊關係
- XSS可能會偷走Cookies
- http-only的Cookies可能不會被偷
Cookies和CSRF攻擊關係
- CSRF攻擊利用了用戶的Cookies
- 攻擊站點沒法讀寫Cookies
- 最好能阻止第三方網站使用Cookies
Cookies安全策略
- 簽名防篡改
- 私有變換(加密、祕鑰、屢次轉換hash算法md5/sha256等)
- http-only(防止XSS攻擊)
- secure(JavaScript不可讀寫)
- same-site (兼容很差可忽略)
點擊劫持,是經過用戶點擊完成的操做,而用戶徹底不知情的狀況下,它的原理是經過iframe標籤嵌套,而後把opaccity透明度設置爲0。
點擊劫持防護措施(二者結合)
<script>
if (top.location != window.location){
top.location = window.location
}
</script>
複製代碼
header('X-Frame-Options:DENY')
複製代碼
上傳問題防護
總結:本文僅僅是我的整理了一些常見的前端安全筆記,僅供參考,還有許多不足之處,其實web安全主要仍是後端來處理的。 前端比如一扇門,雖然防不住小偷,可是還要把門鎖上!