1. 程式人生 > 實用技巧 >web漏洞分析防禦

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, '&lt;');        // 轉義替換 <
      str = str.replace(/>/g, '&gt;');        // 轉義替換 >
       str = str.replace(/"/g, '&quto;');      // 轉義替換 "
       str = str.replace(/'/g, '&#39;');       // 轉義替換 '
       str = str.replace(/ /g, '&#32;');       // 轉義替換 空格
       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、首選會過期