1. 程式人生 > 其它 >「2022」打算跳槽漲薪,必問面試題及答案——WEB 安全

「2022」打算跳槽漲薪,必問面試題及答案——WEB 安全

Hi,我是前端人,今日與君共勉!廢話不多說,直接上乾貨!


1、你對 WEB 安全的理解?

網際網路發展迅速,現在的 web 不再是以前的簡單網頁,除了常見的電商購物平臺、手機轉賬、銀行系統之外,物聯網技術的發展,不僅讓智慧家居走進了生活,也促進了醫療、物流等行業的發展,安全問題逐漸也成為大家比較關心的問題。

作為一個前端程式設計師最關心的也就是 web 安全嘍,較為常見且危害較大的有 XSS跨站指令碼攻擊、SQL 注入、CSFR 跨站請求偽造等攻擊方式。我們需要更好的理解它們的惡意攻擊原理,才能更好的防禦攻擊。

2、XSS 跨站指令碼攻擊

XSS 是 Cross Site Scripting 的縮寫,為了與 CSS 做區分,所以叫做 XSS 。

XSS 攻擊主要是 web 頁面被植入了惡意的 script 程式碼,當用戶訪問頁面的時候,嵌入的惡意程式碼自動執行,從而達到攻擊的效果。XSS 攻擊型別可分為三種:

  • 反射型 XSS 攻擊
  • 儲存型 XSS 攻擊
  • 文件型 XSS 攻擊

反射型 XSS 是發出網路請求時,惡意攻擊程式碼出現在 url 中,作為輸入內容提交給伺服器,伺服器再返回給瀏覽器,瀏覽器執行 XSS 程式碼,這個過程像是一次反射,所以叫做反射型 XSS 攻擊。

http://www.xxx.com?q=<script>alert("惡意指令碼")</script>
或
http://www.xxx.com?n=<img sec="1 onerror=alert('惡意程式碼')">

儲存型 XSS 是提交的 XSS 程式碼儲存到伺服器的資料庫、記憶體或檔案系統內,下次請求目標頁面時不再提交 XSS 程式碼。常見於使用者輸入的地方。

文件型 XSS 不會經過伺服器,作為中間人的角色,在資料傳輸過程中劫持到網路資料包,然後修改裡面的 html 文件。

XSS 危害較多,常見的是盜用賬號、盜取商業價值資訊等。所以我們就需要做一定的防禦措施來保障使用者的權益,針對以上三種攻擊方式,對應的也有三種防禦措施,分別為:

  • 客戶端和服務端進行轉義編碼
<script>alert('惡意程式碼')</script>

轉義編碼後編輯器又會給你重新處理,不知道的同學可以自己試試!

  • 過濾掉危險節點,如 script、style、link、iframe 。
  • 利用 CSP

Content Security Policy 內容安全策略,可以規定當前網頁可以載入的資源的白名單,從而減少網頁受到 XSS 攻擊的風險。

3、CSRF 怎麼防禦知道嗎?

CSFR 是 cross site request forgery ,中文名叫跨站請求偽造。也被稱為:one click attack/session riding,縮寫為:CSRF / XSRF。

CSRF 主要是攻擊者盜用使用者的身份,以使用者的名義進行惡意操作,容易造成個人隱私洩露以及財產安全問題,所以 CSRF 的防禦措施不能少,可以從服務端和客戶端兩方面著手,它的防禦方式有以下幾種:

  • 檢查 http 頭部的 referer 資訊
  • 使用一次性令牌
  • 關鍵操作使用 POST 請求
  • 使用驗證碼

具體的防禦措施內容為:

1>、檢查 http 頭部的 referer 資訊

referer 包含在 http 請求頭內,表示請求介面的頁面來源,服務端通過檢查 referer 資訊,發現來源於外域時攔截請求,阻止不明請求,一定程度上可以減少攻擊。

2>、使用一次性令牌

使用一次性令牌做身份標識,黑客是無法通過跨域拿到一次性令牌的,所以服務端可以通過判斷是否攜帶一次性令牌,可以排除一部分非法操作者。

3>、 關鍵操作使用 POST 請求

敏感操作使用 POST 請求,主要是為了防止使用者敏感資訊出現在 url 中,容易洩露重要資訊。

4>、使用驗證碼

CSRF 攻擊基本都是出現在使用者不知道的情況下,在使用者無感的情況下偷偷發送網路請求,如果使用驗證碼,需要每次進行重要操作時進行驗證,從而簡單有效的防禦了 CSRF 攻擊。

4、SQL注入是啥?

所謂的 SQL 注入就是把 SQL 語句命令插入到 web 表單提交或頁面請求的查詢字串,最終達到伺服器執行惡意 SQL 命令。它是一種常見的 WEB 安全漏洞,攻擊者會利用這個漏洞,可以訪問或修改資料,利用潛在的資料庫漏洞進行攻擊。

SQL 注入可以分為以下幾例:

  • 數字型注入
  • 字元型注入
  • 其他型別

SQL 注入的防範措施:

  • 新增正則驗證和過濾。凡是使用者輸入的地方,都不要信任使用者的輸入,需要對使用者輸入的內容進行正則表示式驗證。
  • 敏感欄位要加密。機密敏感的資訊不能直接存放,需要加密或 hash 掉敏感的資訊。
  • 不要使用管理員許可權連線資料庫。為每個應用使用單獨的許可權進行控制有限的資料庫連線,永遠不要使用管理員許可權連線資料庫。
  • 不能動態拼接SQL語句。可以使用引數化的 SQL 或者直接使用儲存過程進行資料查詢存取,但是不要動態拼接。

5、DDOS 攻擊

DDOS 是 Distributed Denial of Service 的縮寫,翻譯為中文是分散式拒絕服務。DDOS 攻擊指的是藉助於客戶/伺服器技術,將多個計算機聯合起來作為攻擊平臺,對一個或多個目標發動 DDOS 攻擊,從而成倍的提高拒絕服務攻擊的威力。該攻擊方式主要利用目標系統網路服務功能缺陷或者直接消耗其系統資源,使得該目標系統無法提供正常的服務。

DDOS 攻擊通過大量合法的請求佔用大量資源,以達到癱瘓網路的目的,具體的表現形式有幾下幾種:

  1. 通過使網路過載來干擾甚至阻斷正常的網路通訊;
  2. 通過向伺服器提交大量請求,使伺服器超負荷;
  3. 阻斷某一使用者訪問伺服器;
  4. 阻斷某服務與特定系統或個人的通訊。

6、DNS 劫持

DNS 是將網路域名對應到真實計算機能夠識別的 IP 地址,以便進一步通訊。DNS劫持就是當用戶通過某一個域名訪問站點時,被篡改的 DNS 伺服器返回的是一個釣魚網站的 IP,使用者被劫持到釣魚網站,進而洩露隱私。

7、HTTP劫持

HTTP劫持是當用戶訪問某個網站時,會經過運營商,運營商和黑廠勾結就能夠截獲請求返回的內容,並且篡改返回的內容之後再返回給使用者。一般網站被劫持之後就會插入一些廣告,嚴重的可能直接修改成釣魚網站竊取使用者資訊。

防禦措施:

通訊過程沒有對對方身份進行校驗以及對資料完整性進行校驗,所以防止 HTTP 劫持的方法只有將內容加密,讓劫持者無法破解篡改,這樣就可以防止 HTTP 劫持了。