1. XSS攻擊
概念
XSS 攻擊指的是跨站腳本攻擊,是一種代碼注入攻擊。攻擊者通過在網站注入惡意腳本,使之在用戶的瀏覽器上運行,從而盜取用戶的信息如 cookie 等
XSS本質是因為網站沒有對惡意代碼進行過濾,與正常代碼混合在一起了,瀏覽器沒發區分那些腳步是否可信,從而導致惡意代碼的執行。
攻擊者可以通過這種攻擊方式進行以下操作:
- 獲取頁面的數據,如DOM、cookie、localstorage;
- DOS攻擊,發送合理請求,暫用服務器資源,從而使用戶無法訪問服務器;
- 破壞頁面結構
- 流量劫持(將鏈接指向某個網站)
攻擊類型
xss攻擊可以分為存儲型、反射型和DOM型
- 存儲型指的是惡意腳本會存儲在目標服務器上,當瀏覽器請求數據時,腳本從服務器傳回并執行
- 反射型指的是攻擊者誘導用戶訪問一個惡意代碼URL后,服務器端接收數據處理,然后把惡意代碼的數據發送到瀏覽器端,瀏覽器端解析這段帶有XSS代碼的數據后當腳本執行,最終完成xss攻擊;
- DOM型指的通過修改頁面的DOM節點行程xss;
存儲型 XSS 的攻擊步驟:
- 攻擊者將惡意的代碼提交到目標網站的數據中;
- 用戶打開目標網站時,?站服務端將惡意代碼從數據庫取出,拼接在 HTML 中返回給瀏覽器
- ?站服務端將惡意代碼從數據庫取出,拼接在 HTML 中返回給瀏覽器
- 惡意代碼竊取?戶數據并發送到攻擊者的?站,或者冒充?戶的?為,調??標?站接?執?攻擊者指定的操作。
這種攻擊常?于帶有?戶保存數據的?站功能,如論壇發帖、商品評論、?戶私信等
反射型 XSS 的攻擊步驟:
- 攻擊者構造出特殊的 URL,其中包含惡意代碼;
- ?戶打開帶有惡意代碼的 URL 時,?站服務端將惡意代碼從 URL 中取出,拼接在 HTML 中返回給瀏覽器;
- 用戶瀏覽器接收到響應后解析執?,混在其中的惡意代碼也被執?;
- 惡意代碼竊取?戶數據并發送到攻擊者的?站,或者冒充?戶的?為,調??標?站接?執?攻擊者指定的操作;
反射型 XSS 跟存儲型 XSS 的區別是:存儲型 XSS 的惡意代碼存在數據庫?,反射型 XSS 的惡意代碼存在 URL ?。
反射型 XSS 漏洞常?于通過 URL 傳遞參數的功能,如?站搜索、跳轉等。 由于需要?戶主動打開惡意的 URL 才能?效,攻擊者往往會結合多種?段誘導?戶點擊。
DOM 型 XSS 的攻擊步驟:
- 攻擊者構造出特殊的 URL,其中包含惡意代碼;
- ?戶打開帶有惡意代碼的 URL;
- ?戶瀏覽器接收到響應后解析執?,前端 JavaScript 取出 URL 中的惡意代碼并執?;
- 惡意代碼竊取?戶數據并發送到攻擊者的?站,或者冒充?戶的?為,調??標?站接?執?攻擊者指定的操作;
DOM 型 XSS 跟前兩種 XSS 的區別:DOM 型 XSS 攻擊中,取出和執?惡意代碼由瀏覽器端完成,屬于前端JavaScript ?身的安全漏洞,?其他兩種 XSS 都屬于服務端的安全漏洞。
如何防御XSS攻擊
- 輸入驗證和清理?:確保對用戶輸入的數據進行合法性驗證和轉義處理。
- 實施內容安全策略(CSP)?:限制加載的資源和腳本。
CSP概念
- CSP 指的是內容安全策略,它的本質是建立一個白名單,告訴瀏覽器哪些外部資源可以加載和執行。我們只需要配置規則,如何攔截由瀏覽器自己來實現。
- 通常有兩種方式來開啟 CSP,一種是設置 HTTP 首部中的 Content-Security-Policy,一種是設置 meta 標簽的方式
對一些敏感信息進行保護,比如 cookie 使用 http-only,使得腳本無法獲取。也可以使用驗證碼,避免腳本偽裝成用戶執行一些操作。
2. CSRF攻擊
CSRF 攻擊指的是跨站請求偽造攻擊,攻擊者誘導用戶進入一個第三方網站,然后該網站向被攻擊網站發送跨站請求。如果用戶在被攻擊網站中保存了登錄狀態,那么攻擊者就可以利用這個登錄狀態,繞過后臺的用戶驗證,冒充用戶向服務器執行一些操作。
CSRF 攻擊的本質是利用 cookie 會在同源請求中攜帶發送給服務器的特點,以此來實現用戶的冒充。
攻擊類型
- GET類型的CSRF攻擊,比如在網站中一個img標簽里構建一個請求,當用戶打開這個網站的時候就會自動發起提交;
- POST類型的CSRF攻擊,比如構建一個表單,然后隱藏它,當用戶進入頁面,自動提交這個表單;
- 鏈接類型的CSRF攻擊,比如在a標簽的href屬性構造一個請求,然后誘導用戶去點擊
如何防御CSRF攻擊
- 進行同源檢測:服務器根據 http 請求頭中 origin 或者 referer 信息來判斷請求是否為允許訪問的站點,從而對請求進行過濾。
- ?使用CSRF令牌?:在每個請求中包含一個唯一的令牌,服務器驗證該令牌的有效性;
- 設置HTTP頭部?:如X-Frame-Options、X-Content-Type-Options等,增強瀏覽器的安全策略?;
3. SQL注入
SQL注入是一種通過操縱數據庫查詢來獲取未經授權的數據庫訪問的攻擊方式。攻擊者可以通過前端輸入插入惡意代碼,如果后端沒有進行適當的驗證和處理,可能會導致敏感數據被竊取或破壞
如何防御SQL注入
- 輸入驗證:確保前端輸入字段經過正確驗證和處理
- 后端驗證:后端不要信任前端輸入的數據,進行二次驗證
- 使用安全檢測工具;如Burp Scanener、sqlmap等工具來檢測潛在的SQL注入漏洞
4.中間人攻擊
中間人攻擊是指攻擊者與通訊的兩端分別創建獨立的聯系,并交換其所收到的數據,使通訊的兩端認為他們正在通過一個私密的連接與對方直接對話,但實際上整個會話都被攻擊者完全控制,在中間人攻擊中,攻擊者可以攔截通訊雙方的通話并插入新的內容
攻擊過程
- 客戶端發送請求到服務端,請求被中間人攔截;
- 服務端向客戶端發送公鑰;
- 中間人截獲公鑰,保留在自己手上,然后自己生成一個偽造的公鑰,發送給客戶端;
- 客戶端接收到偽造的公鑰后,生成加密hash值發給服務器;
- 中間人獲得加密hash值,用自己的私鑰解密獲得真密鑰,同時生成假的hash值,發送服務器;
- 服務器用私鑰解密獲得假密鑰,然后加密數據傳輸給客戶端;
如何防御中間人攻擊
- 加密通信:使用加密技術可以有效地防止中間人攻擊。在傳輸數據時使用加密算法,確保數據在傳輸過程中不被竊聽或篡改;
- 身份驗證:在進行任何通信之前,要求用戶進行身份驗證,列如使用電子郵件地址或密碼進行驗證。這可以增加攻擊者的難度,因為攻擊者需要設法繞過身份驗證過程;
- 限制訪問:限制對敏感數據的訪問,可以防止未經授權人的訪問數據。列如,在服務器上設置訪問的控制列表,只允許授權用戶可以訪問敏感數據;
- 監控系統:安裝監控系統并定期監視網絡流量,可以發現中間人攻擊并采取適當的措施。這可以幫助及時采取行動,防止攻擊者篡改通信內容;
5. 網絡劫持
網絡劫持分為兩種
DNS劫持
輸入京東被強制跳轉淘寶這屬于dns劫持
- DNS強制解析:通過修改運營商的本地DNS記錄,來引導用戶流量緩存到服務器
- 302的跳轉方式:通過監控網絡出口的流量,分析判斷那些內容是可以進行劫持的,在對劫持內容發起302跳轉的回復,引導用戶獲取內容
HTTP劫持
訪問谷歌但是一直有其它的游戲廣告彈出,由于http明文傳輸,運營商會修改你的http響應內容(即加廣告)
DNS劫持由于涉嫌違法,已經被監管起來,現在很少有DNS劫持,而http劫持依然非常盛行,最有效的辦法就是全站HTTPS,將HTTP加密這使得運營商無法獲取明文,就無法劫持你的響應內容;
6. 那些可能引起前端安全問題
- 跨站腳本攻擊(xss):一種代碼注入方式,為了與css區分所以被稱作xss,早期常?于?絡論壇, 起因是?站沒有對?戶的輸?進?嚴格的限制, 使得攻擊者可以將腳本上傳到帖?讓其他?瀏覽到有惡意腳本的??, 其注??式很簡單包括但不限于JavaScript / CSS / Flash 等;
- iframe的濫用:iframe中的內容是由第三?來提供的,默認情況下他們不受控制,他們可以在iframe中運?JavaScirpt腳本、Flash插件、彈出對話框等等,這可能會破壞前端?戶體驗;
- 跨站點請求偽造(csrf):指攻擊者通過設置好的陷阱,強制對已完成認證的?戶進??預期的個?信息或設定信息等某些狀態更新,屬于被動攻擊;
- 惡意第三?庫: ?論是后端服務器應?還是前端應?開發,絕?多數時候都是在借助開發框架和各種類庫進?快速開發,?旦第三?庫被植?惡意代碼很容易引起安全問題;