天天看點

前端的安全問題

1.dom型xss

利用dom本身存在的缺陷進行攻擊。 如下代碼,頁面中某個圖檔擷取路徑。其中,傳回的{{img.src}}=​<code>​'/xxx' onerror='/xxx'​</code>​,img标簽就變成了​<code>​&lt;img src="/xxx" onerror=xxx"&gt;​</code>​。src肯定會加載失敗,然後會執行onerror中注入的惡意代碼,達到攻擊效果。

2.反射性xss

反射型xss也被稱為非持久性xss,是現在最容易出現的一種xss漏洞。xss代碼出現在url中,通過引誘使用者點選一個連結到目标網站的惡意連結來實施攻擊。 如下惡意連結,其中,xxx是惡意代碼。傳到伺服器的參數data,被伺服器接收之後,響應的頁面包含data這個變量的,會将惡意代碼注入到頁面上面,進行攻擊。

3.存儲型xss

存儲型xss又被稱為持久性xss,它是最危險的一種跨站腳本,相比反射型xss和dom型xss具有更高的隐蔽性,是以危害更大,它不需要使用者手動觸發。 當攻擊者送出一段xss代碼後,被伺服器端接收并存儲,當所有浏覽者通路某個頁面時都會被xss,其中最典型的例子就是留言闆。

防禦方案

1.過濾

對使用者的輸入進行過濾,通過将​<code>​&lt;&gt;​</code>​ ​<code>​''​</code>​ ​<code>​""​</code>​等字元進行轉義,移除使用者輸入的style節點、script節點、iframe節點。

2.編碼

根據輸出資料所在的上下文來進行相應的編碼。資料放置于html元素中,需進行html編碼,放置于url中,需要進行url編碼。此外,還有javascript編碼、css編碼、html屬性編碼、json編碼等等。

3.httponly

在cookie中設定httponly屬性,使js腳本無法讀取到cookie資訊。

危害是攻擊者可以盜用你的身份,以你的名義發送惡意請求。比如可以盜取你的賬号,以你的身份發送郵件,購買商品等。

前端的安全問題

從上圖可以看出,要完成一次csrf攻擊,受害者必須依次完成兩個步驟 :

1.登入受信任網站a,并在本地生成cookie 。 2.在不退出a的情況下,通路危險網站b。

1.對于關鍵操作我們應該采用post方法。

2.csrf在攻擊的時候往往是在使用者不知情的情況下送出的,我們可以使用驗證碼來強制跟使用者互動,但是太多強制性的操作對使用者來說體驗感不好,是以要權衡利弊。

3.在重要的請求中添加token,目前主流的做法是使用token抵禦csrf攻擊。csrf攻擊成功的條件在于攻擊者能夠預測所有的參數進而構造出合法的請求,是以我們可以加大這個預測的難度,加入一些黑客不能僞造的資訊。我們在送出表單時,保持原有參數不變,另外添加一個參數token,該值可以是随機并且加密的,當送出表單時,用戶端也同時送出這個token,然後由服務端驗證,驗證通過才是有效的請求。但是由于使用者的cookie很容易由于網站的xss漏洞而被盜取,是以這個方案必須要在沒有xss的情況下才安全。

4.檢測referer.所謂referer,就是在一個網絡請求頭中的鍵值對,标示着目前的請求是從哪個頁面過來的。伺服器通過檢查referer的值,如果判斷出referer并非本站頁面,而是一個外部站點的頁面,那麼我們就可以判斷出這個請求是非法的。與此同時,我們也就檢測到了一次csrf攻擊。但是,伺服器有時候并不能接收referer值,是以單純地隻通過referer來防禦是不太合理的,它是以經常用于csrf的檢測。

點選劫持就是将一個危險網站設定透明,然後在其上方設定一個按鈕,當你點選這個按鈕的時候,就會觸發底部惡意網站的某些事件。

1.設定http響應頭 x-frame-options

x-frame-options http 響應頭是用來給浏覽器訓示允許一個頁面可否在​<code>​&lt;frame&gt;​</code>​, ​<code>​&lt;iframe&gt;​</code>​或者 ​<code>​&lt;object&gt;​</code>​ 中展現的标記。網站可以使用此功能,來確定自己網站的内容沒有被嵌到别人的網站中去。

2.使用csp(content security policy)内容安全政策

現如今進行應用開發,無論是後端伺服器應用還是前端應用開發,絕大多數時候我們都是在借助開發架構和各種類庫進行快速開發。然而,一些第三方的依賴或者插件存在很多安全性問題,也會存在這樣那樣的漏洞,是以使用起來得謹慎。

1.盡量減少第三方依賴,選用相對成熟的依賴包。

2.使用自動化工具檢查這些第三方代碼有沒有安全問題,比如nsp(node security platform),snyk等等。

出于性能考慮,前端應用通常會把一些靜态資源存放到cdn(content delivery networks)上面,例如 js 腳本和 style 檔案。這麼做可以顯著提高前端應用的通路速度,但與此同時卻也隐含了一個新的安全風險。如果攻擊者劫持了cdn,或者對cdn中的資源進行了污染,攻擊者可以肆意篡改我們的前端頁面,對使用者實施攻擊。 現在的cdn以支援sri為榮,script 和 link 标簽有了新的屬性 integrity,這個屬性是為了防止校驗資源完整性來判斷是否被篡改。它通過 驗證擷取檔案的哈希值是否和你提供的哈希值一樣來判斷資源是否被篡改。 使用 sri 需要兩個條件:一是要保證 資源同域 或開啟跨域,二是在&lt;script&gt;中 提供簽名 以供校驗。

前端的安全問題

但是這個屬性有相容問題

前端的安全問題