web前端安全與防禦
大體進行總結了一下相關知識點,如下:
一、XSS:是跨站指令碼攻擊(Cross-Site Scripting)的簡稱。
1、簡介:XSS是指惡意攻擊者利用網站沒有對使用者提交資料進行轉義處理或者過濾不足的缺點,進而新增一些程式碼,嵌入到web頁面中去,使別的使用者訪問都會執行相應的嵌入程式碼。總的來說,XSS的攻擊方式就是想辦法“教唆”使用者的瀏覽器去執行一些這個網頁中原本不存在的前端程式碼。
2、分類:
1)反射型XSS攻擊:非永續性跨站點指令碼攻擊,它是最常見的型別的XSS(資料流向為:瀏覽器 -> 後端 -> 瀏覽器)
a、解釋:
b、原理:例如在一個表單的輸入框中輸入資料-----點選按鈕即可將輸入內容打印出來。(不存在任何過濾)
我們在輸入框輸入一段js程式碼,比如比如<script>alert('hack')</script>,
點選按鈕後即可彈出內容
此時我們輸如的內容直接插入到了頁面中,解釋為<script>標籤。
2)儲存型xss攻擊:持久型跨站點指令碼。(資料流向:瀏覽器 -> 後端 -> 資料庫 -> 後端 -> 瀏覽器。)
a、原因:
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應用程式的頁面中包含惡意程式碼或連結來工作。簡單的說,就是攻擊者可以盜用你的登陸資訊,以你的身份模擬傳送各種請求。
三、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)單獨設定檔案伺服器的域名。