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、首選會過期