web前后端分離漏洞分析防御
漏洞分析,主要漏洞有
一、跨站腳本攻擊XSS
程序 + 數據 = 結果;攻擊后,數據夾雜一部分程序(執行代碼),導致結果改變;
1、XSS攻擊注入點
(a):HTML節點內容;例如:評論的時候帶上腳本 (b):HTML屬性 <img src="#{image}" /> <img src="1" onerror="alert('2')" /> (c):javascript代碼 var data = "#{data}"; var data = "hello";alert(1);"";
2、XSS攻擊防御
(a):瀏覽器自帶的防御,這個在后台去開啟,不過只能防御,在HTML中和HTML屬性中的XSS攻擊;
(b):顯示到前台數據轉義;例如腳本攻擊,我們只需要將 < 和 > 以及 " 轉義為代碼的左右括號以及雙引號,這樣代碼就不會執行;有兩個方向
1、用戶輸入提交的時候;
2、顯示的時候
顯示的時候轉義,后端把代碼左右尖括號替換即可,也就是說用戶代碼不會被執行,只會輸入什么顯示什么,即便是script 標簽也只會展示出來;(轉義的是要顯
示在前台的數據)
var escapeHtml = function(str) { if(!str) return ''; str = str.replace(/</g, '<'); // 轉義替換 < str = str.replace(/>/g, '>'); // 轉義替換 > str = str.replace(/"/g, '&quto;'); // 轉義替換 " str = str.replace(/'/g, '''); // 轉義替換 ' str = str.replace(/ /g, ' '); // 轉義替換 空格 return str; }
(c):富文本的處理:
1、黑名單模式,吧不對的標簽過濾掉;例如:script 去掉;這種需要操作的太多,規則太多了;
2、白名單過濾,只允許特定的;保留部分標簽和屬性;
XSS共計的主要防御就是轉義、替換;
3、CSP 內容安全策略
用於指定哪些內容可以執行;(例如:用戶輸入的部分變為不可執行,此時即使里面有腳本,也不會執行); CSP主要是在頭部Header添加的;
二、跨站請求偽造攻擊CSRF
CSRF在其他的網站對目標網站發出了一些請求;XSS是在本網站運行了一些其他的請求;這是兩者的區別;
get共計更簡單,Img 標簽src為這個攻擊連接(訪問接口或者其他),網頁打開img加載就執行了;
1、CSRF攻擊原理:
a網站用戶登錄,向a的后台發送登錄,后台發送相應的信息返回給a的前台,包括cookie等信息,用戶在B網站訪問的時候,訪問了a的一個接
口,這個時候b進行的是訪問a的后台,所以同樣帶了相應的用戶信息,這個時候用戶就不知情的情況下執行了某個操作(並且帶的自己的信息);
2、CSRF攻擊危害:
(a): 利用用戶登錄態; 例如:盜取用戶資金(轉賬、消費)
(b): 用戶不知情; 例如:冒充用戶發帖背鍋
(c):完成業務請求;
(d):損害公司域名;
3、CSRF攻擊防御:
(a): 禁止第三方網站帶Cookies;
例如:Cookies新增的屬性 same-site 屬性,也就是相同的網站才能帶上;這個方法兼容性不好,目前基本只有谷歌和opeor支持;
(b): 思路:共計是從其他網站訪問我們后台造成的,所以防御思路為必須從a網站走,不訪問A的前端接口不讓成功;
1、可以通過驗證碼,接口提交必須要驗證碼;
2、接口添加token;這樣第三方,不知道驗證碼、token就無法在執行訪問接口;頁面中后台傳一個token,提交的時候加上這個;
(c):第三方的網站共計 referer 為第三方網站;
if(!/^https?:\/\/localhost/.test(referer)){ console.log('非法請求'); }
后台添加判斷,如果referer不包含我們的網站域名,便拋出錯誤非法請求;
三、前端Cookies安全性
1、XSS和Cookies的關系
(a)、XSS可能偷取Cookies;防止 http-only的Cookies不會被偷
2、CSRF和Cookies的關系
(a)、CSRF利用了用戶的Cookies;防御 不讓第三方讀寫Cookies,或者 組織第三方使用Cookies(same-site )
3、Cookies的安全策略
(a):簽名防篡改
(b):私有變化(加密),吧信息隱藏起來或者給到前台的數據用戶是看不懂的,但是后台經過處理可以看懂;
(c):http-only使Cookies私有化
(d):secure
(e):Cookies(same-site )
四、點擊劫持攻擊
原理:通過iframe將目標網站加載過來,透明度設置為零,所以用戶看到的是想讓你看到的,但實際操作的是攻擊的網站;
特征:
1、用戶親手操作
2、用戶不知情
點擊劫持防御
(a):用JavaScript防止內嵌
// 此方法如果攻擊我們的網站,禁止我們的網站加載 腳本將失效;此時用b方法 if(top.localtion != window.localtion){ top.localtion = window.localtion }
(b):X-FRAME-OPTIONS 禁止內嵌;頭部header添加
(c):其他輔助手段;例如:添加驗證碼
五、傳輸過程安全問題(http協議的竊聽和篡改)
http服務請求的時候會有很多的鏈路,http請求是明文的,接受和返回都是明文所以安全問題比較大;安全問題有,竊聽和篡改;
竊聽:用戶信息;敏感信息;
篡改:插入廣告;重定向網站;無法防御的XSS和CSRF攻擊;
防御:
1、TLS(SSL)加密;服務器與鏈路之間的加密,數據的發送接收都會加密處理;也就是https
六、用戶密碼安全問題
1:密碼的作用:
證明你是你;利用存儲的密碼對比輸入的密碼
2:密碼的存儲:
防止密碼泄露:
(a): 嚴禁密碼的明文存儲;哈希算法
哈希算法特點
明文--密文一一對應;雪崩效應;密文-明文無法反推;密文固定長度;常見哈希算法:md5、sha1、sha256
(b): 單向變換(將密碼以特定的方式進行變換)
(c): 密碼復雜度要求(防猜解)
(d): 加鹽
彩虹表:網絡提供的一個平台,用密文可查找明文(例如用MD5的密文查詢對應的明文);所以一層的MD5加密是能破解的
最好是兩次MD5加密或者混合使用加密
3:密碼的傳輸
(a): https傳輸
(b): 頻率限制(例如一分鍾允許登錄的次數)
(c):前端傳輸加密密碼(只能阻止用戶的明文密碼不被別人拿到)
4:密碼的替代方案
5:生物特征密碼
七、SQL注入攻擊
原理:原本的數據變成了數據帶上了程序;
防御:
(a): 關閉錯誤輸出
(b): 檢查數據類型
(c): 對數據進行轉義
(d): 參數化查詢;
(e): 對象關系映射(ORM)
八、上傳的問題
1、上傳問題(例如圖片)
用戶上傳文件,然后訪問;問題在:上傳后訪問的時候,如果不是圖片而是程序或者可執行的文件的時候,就出問題了;
2、上傳防御:
(a): 限制上傳文件的后綴名
(b): 文件類型的檢查
(c): 文件內容檢查;文件的頭
(d): 程序輸出;例如上傳文件,上傳后后台處理在返回給前台,不讓前台直接訪問上傳的東西;
(e): 權限互斥-可寫和可執行互斥; 也就是寫入的不能唄執行;執行的權限不允許更改
九、社會工程學和信息泄露
1、泄露系統的敏感信息
2、泄露用戶的敏感信息
3、泄露用戶密碼
4、錯誤信息時空
5、SQL注入
6、水平權限控制不當(權限以及身份驗證)
第三方的防御Oauth思想(例如扣扣、微信授權登錄)
1、一切行為由用戶授權
2、授權行為不泄露敏感信息
3、首選會過期