web網絡安全
常見的幾種網路安全問題與攻擊前端
XSS CSRF SQL注入 命令行注入 DDos攻擊 流量劫持
XSS
XSS稱爲跨站腳本攻擊,原理就是攻擊者往web頁面中惡意插入可執行網頁腳本代碼,用戶在瀏覽該頁的時候,嵌入在網頁中的腳本會執行,從而達到獲取用戶信息或者其餘侵犯用戶安全隱私的目的。同時XSS又分爲三類:非持久型XSS(反射型)漏洞,持久型XSS(存儲型)漏洞,基於字符集的XSS,基於Flash的跨站XSS,未經驗證的跳轉XSSweb
非持久型XSS(反射型)漏洞:
攻擊者經過給別人發送帶有惡意腳本代碼參數的URL,當URL地址被打開時,特有的惡意代碼參數被HTML解析、執行,從而達到攻擊目的(獲取用戶信息,侵犯隱私)正則表達式
- 特色:
1.必需要經過誘騙點擊
2.即時性,不通過服務器存儲,直接經過HTTP的GET和POST請求就能完成一次攻擊
- 解決方法:
1.Web頁面渲染全部內容或渲染的數據必須來源於服務器
2.不要從 URL,document.referrer,document.forms 等這種 DOM API 中獲取數據直接渲染
3.儘可能不要使用 eval, new Function(),document.write(),document.writeln(),window.setInterval()window.setTimeout(),innerHTML,document.creteElement() 等可執行字符串的方法
4.須要對DOM渲染方法傳入的字符串參數作escape轉義
持久型XSS(存儲型)漏洞:
通常存在與form提交表單之中,如留言,提交文本。攻擊者利用XSS漏洞,將腳本內容通過正常功能提交進入數據庫永久保存,當前端得到後端從數據庫中讀出的注入代碼時,將其渲染執行。shell
- 特色:注入方式不是來源與URL,經過後端從數據庫讀取數據。不須要誘騙點擊,只要求攻擊者在提交表單的地方完成注入便可。
- 成功條件:
(1)POST請求提交表單沒有通過轉義直接入庫
(2)後端從數據庫取出數據沒有轉義直接輸出給前端
(3)前端拿到後端數據後沒有通過轉義直接渲染
- 防止方法:
(1)後端入庫前不要相信前端任何數據,統一將全部字符轉義
(2)後端將數據輸出給前段時統一進行轉義
(3)前端進行渲染時,將從後端請求過來的數據統一轉義處理。
基於字符集的XSS
大部分瀏覽器都專門針對XSS進行轉義處理,但也有不少方式能夠繞過轉義規則,好比web頁面字符集不固定,用戶輸入非字符集字符,有時會繞過轉義過濾規則數據庫
- 防止辦法:指定 <meta charset="utf-8">,用utf-8,並且標籤閉合
基於Flash跨站的XSS
未經驗證的跳轉XSS
- 發生條件: 有時後端要對用戶輸入的URL進行一個302跳轉,攻擊者經過輸入一個惡意的跳轉地址執行腳本
- 防止方法:
(1)對待跳轉的URL參數作白名單或者某種規則過濾
(2)後端對敏感信息進行保護,好比用Cookie來驗證
CSRF (跨站請求僞造攻擊)
CSRF,攻擊者盜用你的登陸信息,以你的身份模擬發送各類請求。後端
- 原理:用戶登陸了某網站A,並在本地記錄了cookie,在沒有退出該網站時(cookie有效的時間內),攻擊者發送引誘網站B,B要求訪問A,從而達到獲取用戶隱私。
- 預防方法:
(1)正確使用get(只用於查看,列舉,展現等不須要改變資源屬性的時候) post(用於form表單提交,改變一個資源的屬性或作一些其餘事情,如數據庫增刪改)和cookie。
(2)非GET請求中,爲每一個用戶生產一個cookie token
(3)POST請求的時候使用驗證碼
(4)渲染表單的時候,爲每一個表單加一個 csrfToken,而後在後端作 csrfToken驗證。
SQL注入
經過此方法來從數據庫獲取敏感信息,或者利用數據庫特性執行添加用戶導出文件等一系列惡意操做瀏覽器
- 原理:程序沒有有效的轉義過濾用戶的輸入,使得攻擊者成功向服務器提交惡意的SQL查詢代碼,使得程序將攻擊者的輸入做爲查詢語句一部分執行
- 預防方法:
(1)嚴格限制web應用的數據庫操做權限,給此用戶提供僅僅可以知足其工做的最低權限
(2)後端代碼檢查輸入數據是否符合預期,嚴格限制變量的類型,好比使用正則表達式進行匹配
(3)對進入數據庫的特殊字符(',",,<,>,&,*)進行轉義處理。
(4)應用上線前建議使用專業的SQL注入檢測
命令行注入
指的是攻擊者可以經過 HTTP 請求直接侵入主機,執行攻擊者預設的 shell 命令這每每是 Web 開發者最容易忽視可是倒是最危險的一個漏洞之一緩存
DDOS 攻擊
分佈式拒絕服務,其原理就是利用大量的請求形成資源過載,致使服務不可用安全
網絡層DDos
- SYN Flood :利用TCP三次握手的Bug,TCP三次握手,客戶端發生SYN(握手信息),服務段收到SYN,併發出ACK(確認信息)+SYN,客戶端收到SYN+ACK,併發出ACK和數據,而SYN Flood攻擊,攻擊方隨意構造客戶端IP發送SYN包,服務端收到後作出迴應發出SYN+ACK,但因爲客戶端IP是隨意構造的,就不能獲得應答,此時服務端就會嘗試再次發送,間隔大約30s,致使資源飽和服務不可用,此攻擊屬於慢型DDos
- ACK Flood: TCP 鏈接創建以後,全部的數據傳輸 TCP 報文都是帶有 ACK 標誌位的,主機在接收到一個帶有 ACK 標誌位的數據包的時候,須要檢查該數據包所表示的鏈接四元組是否存在,若是存在則檢查該數據包所表示的狀態是否合法,而後再向應用層傳遞該數據包。若是在檢查中發現該數據包不合法,例如該數據包所指向的目的端口在本機並未開放,則主機操做系統協議棧會迴應 RST 包告訴對方此端口不存在。
- UDP Flood:UDP是一種無鏈接協議,所以攻擊者能夠僞造大量的IP發生UDP包,這種攻擊屬於大流量攻擊,但正常狀況下,UDP包雙向流量會基本相等,所以發這種攻擊的攻擊者耗費對方資源的狀況下也在消耗本身的資源
- ICMP Flood 攻擊:發生大量不正常的ICMP包(內容不少很大),致使目標帶寬被佔用,但自己資源也會被消耗
解決辦法:
(1)進行流量清洗
(2)限制單IP請求頻率服務器
應用層DDos
是發生在 TCP 創建握手成功以後,應用程序處理請求的時候,如今不少常見的 DDoS 攻擊都是應用層攻擊
- CC攻擊 :就是針對消耗資源比較大的頁面不斷髮起不正常的請求,致使資源耗盡,此在發送 CC 攻擊前,咱們須要尋找加載比較慢,消耗資源比較多的網頁,好比須要查詢數據庫的頁面、讀寫硬盤文件的等
- DNF Flood:DNS Flood 攻擊採用的方法是向被攻擊的服務器發送大量的域名解析請求,一般請求解析的域名是隨機生成或者是網絡世界上根本不存在的域名。解析域名會如今緩存中查詢,若是找不到會向上層DNS服務器遞歸查詢。每秒域名解析超過必定數量就會形成DNS解析超時。
- HTTP 慢速鏈接攻擊:先創建HTTP鏈接,設置一個較大的 Conetnt-Length,每次只發送不多字節,讓服務器一直覺得HTTP頭部傳輸沒有完成,這樣鏈接一多就出現資源耗盡。
解決方法:
(1)針對IP+cookie,限制訪問頻率
(2)關閉服務器最大鏈接數
(3)減小數據庫讀取操做
其餘DDos攻擊:
- 利用XSS :好比在搶票頁面中,利用XSS漏洞,執行腳本往某個網站隨便發送請求,隨着用戶量訪問增多,被攻擊的站點就會迅速癱瘓
- P2P 網絡攻擊
流量劫持
DNS劫持
DNS是將網絡域名對應到真實計算機可以識別的IP地址,以便進一步通訊。DNS劫持就是當用戶經過某一個域名訪問站點時,被篡改的DNS服務器返回的是一個釣魚站點的IP,用戶就被劫持到釣魚網站,進而隱私泄露。
HTTP劫持
HTTP劫持,當用戶訪問某個站點時會通過運營商網絡,不法運營商和黑廠勾結可以截獲請求返回內容,而且篡改內容,而後再返回給用戶,從而實現劫持頁面,輕則插入小廣告,重則直接串改爲釣魚網站騙用戶隱私。
- 解決辦法:通訊過程沒有對對方身份進行校驗以及對數據完整性進行校驗,因此防止 HTTP 劫持的方法只有將內容加密,讓劫持者沒法破解篡改,這樣就能夠防止 HTTP 劫持了
參考文章:https://juejin.im/entry/5a559...