天天看點

web前端安全與防禦

大體進行總結了一下相關知識點,如下:

一、XSS:是跨站腳本攻擊(Cross-Site Scripting)的簡稱。

1、簡介:XSS是指惡意攻擊者利用網站沒有對使用者送出資料進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去,使别的使用者通路都會執行相應的嵌入代碼。總的來說,XSS的攻擊方式就是想辦法“教唆”使用者的浏覽器去執行一些這個網頁中原本不存在的前端代碼。

2、分類:

1)反射型XSS攻擊:非持久性跨站點腳本攻擊,它是最常見的類型的XSS(資料流向為:浏覽器 -> 後端 -> 浏覽器)

     a、解釋:非持久型xss攻擊是一次性的,僅對當次的頁面通路産生影響。非持久型xss攻擊要求使用者通路一個被攻擊者篡改後的連結,使用者通路該連結時,被植入的攻擊腳本被使用者遊覽器執行,進而達到攻擊目的。

     b、原理:例如在一個表單的輸入框中輸入資料-----點選按鈕即可将輸入内容列印出來。(不存在任何過濾)

                      我們在輸入框輸入一段js代碼,比如比如<script>alert('hack')</script>,

                      點選按鈕後即可彈出内容

                      此時我們輸如的内容直接插入到了頁面中,解釋為<script>标簽。

2)存儲型xss攻擊:持久型跨站點腳本。(資料流向:浏覽器 -> 後端 -> 資料庫 -> 後端 -> 浏覽器。)

      a、原因:它一般發生在XSS攻擊向量(一般指XSS攻擊代碼)存儲在網站資料庫,當一個頁面被使用者打開的時候執行。(每當使用者打開浏覽器,腳本執行。持久的XSS相比非持久性XSS攻擊危害性更大,因為每當使用者打開頁面,檢視内容時腳本将自動執行。)

      b、舉例:還是上邊的例子,背景在接受到輸入資料後直接存儲到資料庫中,那麼每次查詢這個值時注入的腳本就會執行。

3)dom-xss(資料流向:URL-->浏覽器 ):DOM型XSS其實是一種特殊類型的反射型XSS,它是基于DOM文檔對象模型的一種漏洞。

       a、原因:直接在url中插入惡意js腳本(這種XSS攻擊的實作是通過對DOM樹的修改而實作的。)

4、危害:

1)竊取網頁浏覽中的cookie值(通過script腳本獲得目前頁面的cookie值,通常會用到document.cookie)

2)劫持流量實作惡意跳轉。

5、防禦措施:

1)對cookie的保護:對重要的cookie設定httpOnly, 防止用戶端通過

document.cookie

讀取cookie。服務端可以設定此字段。

2)對使用者輸入資料的處理:

     a、編碼:不能對使用者輸入的内容都保持原樣,對使用者輸入的資料進行字元實體編碼。對于字元實體的概念可以參考文章底部給出的參考連結。

     b、解碼:原樣顯示内容的時候必須解碼,不然顯示不到内容了。

     c、過濾:把輸入的一些不合法的東西都過濾掉,進而保證安全性。如移除使用者上傳的DOM屬性,如onerror,移除使用者上傳的Style節點,iframe, script節點等。

二、CSRF(Cross Site Request Forgery):站點僞造請求

1、簡介:通過在通路使用者被認為已經通過身份驗證的Web應用程式的頁面中包含惡意代碼或連結來工作。簡單的說,就是攻擊者可以盜用你的登陸資訊,以你的身份模拟發送各種請求。

2、CSRF的原理及預防

三、SQL注入

1、簡介:使用者可以送出一段資料庫查詢代碼,根據程式傳回的結果,獲得某些他想得知的資料。

2、預防措施:原理及防禦措施

四、cookie竊取和session劫持

原理

五、釣魚攻擊

1、簡介:攻擊者會發送給受害者一個合法連結,當連結被點選時,使用者被導向一個似是而非的非法網站,進而達到騙取使用者信任、竊取使用者資料的目的。

2、防禦措施:對所有的重定向操作進行稽核,以避免重定向到一個危險的地方.

      1)常見解決方案是白名單,将合法的要重定向的url加到白名單中,非白名單上的域名重定向時拒之;

      2)重定向token,在合法的url上加上token,重定向時進行驗證。

六、HTTP Headers攻擊

1、簡介:HTTP協定在Response header和content之間,有一個空行,即兩組CRLF(0x0D 0A)字元。這個空行标志着headers的結束和content的開始。“聰明”的攻擊者可以利用這一點。隻要攻擊者有辦法将任意字元“注入”到headers中,這種攻擊就可以發生。

2、防禦措施:過濾所有的response headers,除去header中出現的非法字元,尤其是CRLF。

七、拒絕服務攻擊

1、簡介:攻擊者想辦法讓目标機器停止提供服務:一是使用SYN flood迫使伺服器的緩沖區滿,不接收新的請求;二是使用IP欺騙,迫使伺服器把非法使用者的連接配接複位,影響合法使用者的連接配接。

2、防禦措施:對于SYN flood:啟用SYN Cookie、設定SYN最大隊列長度以及設定SYN+ACK最大重試次數。

八、檔案上傳攻擊。

1、簡介:使用者上傳一個可執行的腳本檔案,并通過此腳本檔案獲得了執行服務端指令的能力。

2、分類:

1)檔案名攻擊:上傳的檔案采用上傳之前的檔案名,可能造成用戶端和服務端字元碼不相容,導緻檔案名亂碼問題;檔案名包含腳本,進而造成攻擊.

2)檔案字尾攻擊:上傳的檔案的字尾可能是exe可執行程式,js腳本等檔案,這些程式可能被執行于受害者的用戶端,甚至可能執行于伺服器上.是以我們必須過濾檔案名字尾,排除那些不被許可的檔案名字尾.

3)檔案内容攻擊:IE6有一個很嚴重的問題 , 它不信任伺服器所發送的content type,而是自動根據檔案内容來識别檔案的類型,并根據所識别的類型來顯示或執行檔案.如果上傳一個gif檔案,在檔案末尾放一段js攻擊腳本,就有可能被執行.這種攻擊,它的檔案名和content type看起來都是合法的gif圖檔,然而其内容卻包含腳本,這樣的攻擊無法用檔案名過濾來排除,而是必須掃描其檔案内容,才能識别。

3、防禦措施:

1)檔案上傳的目錄設定為不可執行。

2)判斷檔案類型。在判斷檔案類型的時候,可以結合使用MIME Type,字尾檢查等方式。因為對于上傳檔案,不能簡單地通過字尾名稱來判斷檔案的類型,因為攻擊者可以将可執行檔案的字尾名稱改為圖檔或其他字尾類型,誘導使用者執行。

3)對上傳的檔案類型進行白名單校驗,隻允許上傳可靠類型。

4)上傳的檔案需要進行重新命名,使攻擊者無法猜想上傳檔案的通路路徑,将極大地增加攻擊成本。

5)限制上傳檔案的大小。

6)單獨設定檔案伺服器的域名。