常見安全漏洞及解決方案

概述:常見的安全漏洞:

漏洞名稱
漏洞背景
避免方法
解決方案
CSRF
(跨站請求僞裝)
攻擊者誘導用戶點擊連接,用戶瀏覽器攜帶cookie成功請求服務器,造成用戶信息丟失。
  • 驗證 HTTP Referer 字段
  • token驗證機制
  • 驗證碼
spring-boot-security-csrf
XSS
(CSS,跨站腳本攻擊)
惡意攻擊者往web頁面插入惡意js代碼,當用戶瀏覽時潛入的代碼會被執行,從而控制用戶的瀏覽器。
  • 過濾特殊字符
  • 使用HTTP頭指定類型
spring-boot-security-xss
SQL注入
外部輸入參數在拼接時,沒有和數據庫語句做嚴格區分,導致攻擊者注入自定義的數據庫語句,從而非預期地操作數據庫。
預編譯sql語句。對mybatis而言,可用#{}代替${}。
Jsonp劫持
jsonp存在非法站點惡意調用、callback參數惡意添加標籤-XSS漏洞等問題。
  • refer白名單匹配
  • callback參數檢查
spring-boot-security-jsonp
DoS攻擊
僞造請求,建立大量的半連接,使服務器連接隊列滿,導致拒絕服務。
設計安全:
脫敏:在對用戶敏感信息(密碼、密鑰、信用卡、借記卡、個人信息(身份證,姓名,tel,mail,add,uid))進行展示/使用時,應遵循一些原則,以防止用戶信息泄露。
對於一些用戶敏感信息,在前後端傳輸過程中,需要加密處理,以防被監聽而泄露。可以使用Http手動加密和Https。對於Http,客戶端收到用戶鍵入的敏感信息後,可以考慮使用base64編碼或者加密處理後,發送到後端。

CSRF

GET 請求,用一個<img src = "...">就可以實現CSRF攻擊,但是GET請求的CSRF攻擊不用防範,前提是我們的接口設計要保證符合HTTP規範,即是:GET請求應該是冪等的,不涉及數據狀態的更新。(冪等,我們可以理解爲強一致:讀:每次的結果都一致。寫:連續調用10次的結果,要保證寫不會重複。另外,當我們調用其他的業務接口時,當出現失敗,要保證結果一定是失敗,即保證一致)。
POST 表單提交:這個CSRF可以進行攻擊,模擬表單提交。解決方案就是服務器使用隨機生成的token,嵌入到表單中,CSRF無法獲得此表單的token值。當進行表單提交時,我們先驗證此token是否合法。框架解決方案是:Spring-security。
增加可信任的域。驗證HTTP的refer頭,看是否是信任的域發起的請求。
可參考:

XSS

由攻擊者輸入惡意數據保存在數據庫,再由服務器腳本程序從數據庫中讀取數據,然後顯示在公共顯示的固定頁面上,那麼所有瀏覽該頁面的用戶都會被攻擊。由於攻擊者輸入惡意數據保存在數據庫,再由服務器腳本程序從數據庫中讀取數據。所以大部分的存儲型XSS漏洞都是在表單提交上會發生的。比如在個人信息或發表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那麼這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易造成蠕蟲,盜竊cookie等。        
    只要有form表單提交,並且回顯邏輯時,當一個虛假的黑客在表單中提交js代碼時,回顯頁面時,js執行引擎解釋這段危險代碼,會造成比較嚴重的問題。比如:流量劫持,彈窗,釣魚等。。。json回寫時,需要經過security的一層轉義。
     但是對於接口來說,你僞造一個賬號來攻擊我的接口是不行的,dos攻擊時,當出現ip超過一定的閾值後,會禁止掉。
如果A提交的內容影響到了B,比如A提交信息時寫了一段js代碼,當上遊B去查看時,這個js代碼就會執行,所以會影響B。如果隻影響A,那麼就不用去解決,因爲對自己負責。
     跨站點腳本攻擊(爲了不跟CSS混淆,叫XSS),在網頁中插入惡意的Java script腳本代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。比如:在留言板插入下邊的腳本內容:
<script>alert(“hey!you are attacked”)</script>
這樣,用戶在訪問此留言板時,就會彈出提醒框。
XSS攻擊可以:竊取用戶cookie值,劫持流量向某個網頁跳轉等。
可用:過濾特殊字符,使用HTTP頭指定類型解決。 框架解決方案是:Spring-security。

Jsonp劫持

JSON是一種基於文本的數據交換方式,或者叫做數據描述格式。Jsonp用來跨域。一個衆所周知的問題,Ajax直接請求普通文件存在跨域無權限訪問的問題,甭管你是靜態頁面、動態網頁、web服務、WCF,只要是跨域請求,一律不準。另外:我們還發現凡是擁有"src"這個屬性的標籤都擁有跨域的能力,比如<script>、<img>、<iframe>。
  • 把跨域服務器寫成 調用本地的函數 ,回調數據回來不就好了?jsonp的核心則是動態添加<script>標籤來調用服務器提供的js腳本
  1. 首先是利用script標籤的src屬性來實現跨域。
  2. 通過將前端方法作爲參數傳遞到服務器端,然後由服務器端注入參數之後再返回,實現服務器端向客戶端通信。
  3. 由於使用script標籤的src屬性,因此只支持get方法
爲了便於客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP,該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然後服務端返回數據時會將這個callback參數作爲函數名來包裹住JSON數據,這樣客戶端就可以隨意定製自己的函數來自動處理返回數據了。
其實核心就是:<script> 可跨域,本地調用<script>調用遠程,然後用callback指定調用方本地的回調函數。
Jsonp劫持:
jsonp存在非法站點惡意調用、callback參數惡意添加標籤-XSS漏洞等問題。
  • refer白名單匹配
  • callback參數檢查
spring-boot-security-jsonp

SQL注入

漏洞背景

        外部輸入參數沒有經過過濾,直接拼接到SQL語句中執行,沒有和數據庫語句做嚴格區分,導致攻擊者注入自定義的數據庫語句,從而非預期地操作數據庫。比如我們可以用 -- 來註釋查詢條件。
select * from user where username = "zhangsan" and password = "..."
利用參數拼接實現sql注入:select * from user where username = "zhangsan" and "1" = "1"-- and password =

避免方法

        預編譯sql語句。對mybatis而言,可用#{}代替${}。因爲#{}相當於JDBC的PreparedStatement,會對自動傳入的數據加一個雙引號;${}是未經預編譯,僅取變量的值,非安全。

DoS 攻擊

是Denial of Service的簡稱,即拒絕服務。 DoS攻擊是指故意的攻擊網絡協議實現的缺陷或直接通過野蠻手段地耗盡被攻擊對象的資源,目的是讓目標計算機或網絡無法提供正常的服務或資源訪問,使目標系統服務系統停止響應甚至崩潰,而在此攻擊中並不包括侵入目標服務器或目標網絡設備。這些服務資源包括網絡帶寬,文件系統空間容量,開放的進程或者允許的連接。這種攻擊會導致資源的匱乏,無論計算機的處理速度多快、內存容量多大、網絡帶寬的速度多快都無法避免這種攻擊帶來的後果。
比如SYN的Flood攻擊
SYN洪水攻擊屬於DoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火牆等網絡系統,事實上SYN攻擊並不管目標是什麼系統,只要這些系統打開TCP服務就可以實施。從圖4-3可看到,服務器接收到連接請求(SYN=i )將此信息加入未連接隊列,併發送請求包給客戶端( SYN=j,ACK=i+1 ),此時進入SYN_RECV狀態。當服務器未收到客戶端的確認包時,重發請求包,一直到超時,纔將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內僞造大量不存在的IP地址,向服務器不斷地發送SYN包,服務器回覆確認包,並等待客戶的確認,由於源地址是不存在的,服務器需要不斷的重發直至超時,這些僞造的SYN包將長時間佔用未連接隊列,正常的SYN 請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。
解決方案:
第一種是縮短SYN Timeout時間第二種方法是設置SYN Cookie,就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重複SYN報文,就認定是受到了攻擊,以後從這個IP地址來的包會被一概丟棄。>netstat -n -p tcp >result.txt
Ping of Death  "ping ofdeath"攻擊就是我們常說的"死亡Ping"  這種攻擊通過發送大於65536字節的ICMP包使操作系統崩潰;通常不可能發送大於65536個字節的ICMP包,但可以把報文分割成片段,然後在目標主機上重組;最終會導致被攻擊目標緩衝區溢出,引起拒絕服務攻擊。有些時候導致telne和http服務停止,有些時候路由器重啓。


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