網絡數據傳輸安全性問題和常見的網絡攻擊

一. 常見的網絡攻擊與解決辦法

轉自:https://blog.csdn.net/loongshawn/article/details/88047373 .

1. XSS攻擊

  XSS(Cross Site Scripting)跨站腳本攻擊,爲了不與層疊樣式表(CSS)混淆,故將跨站腳本攻擊縮寫爲XSS。原理即在網頁中嵌入惡意腳本,當用戶打開網頁時,惡意腳本便開始在用戶瀏覽器上執行,以盜取客戶端cookie、用戶名、密碼,甚至下載木馬程式,危害可想而知。

  以一個表單輸入舉例說明

<input type="text" name="firstname" value="">

  在這裏插入圖片描述
在這裏插入圖片描述

  倘若用戶在表單中輸入惡意腳本,即對輸入做些處理,如:

<input type="text" name="firstname" value=""/><script>alert("longlong")</script><!-- "/>

  就會出現以下結果:
在這裏插入圖片描述

  其實攻擊的形式還有很多,比如將腳本僞裝進URL,然後將URL進行URLEncode編碼,當用戶點擊鏈接後,腳本就會被執行。

XSS防範:

  之所以會發生XSS攻擊,是因爲用戶輸入的數據變成了代碼, 因此需要對用戶輸入的數據進行HTML轉義處理,將輸出的“尖括號”、“單引號”、“引號”之類的特色符號進行轉義。

HTML HTML轉義後的字符
< <
> >
&
"

2. CSRF攻擊

  CSRF攻擊的全稱跨站請求僞造(Cross Site Request Forgery),通過盜用用戶的身份信息,以你的名義向第三方網站發起惡意請求,若轉賬、盜取賬號、發信息、郵件。流程框圖如下:
在這裏插入圖片描述
  所以CSRF攻擊一般場景是:
  1、用戶登錄受信站點A,生成本地cookie;
  2、用戶沒有退出站點A,訪問了惡意站點B。

  CSRF攻擊舉例:惡意轉賬

Get請求
www.boc.com/transfer.do?accountNum=6233XXXX4324&money=10000
參數說明
accountNum轉賬目標賬號
money轉賬金額

  如果銀行系統利用上述接口轉賬,就用可能會被惡意網站攻擊。當然上面僅是舉例,銀行安全等級不至於這麼低,使用GET轉賬。比如銀行升級接口爲POST提交,當然這也不能解決根本的安全問題,黑客照樣能夠利用XSS漏洞植入惡意代碼,請求轉賬接口。
  真實銀行交易系統付款會有USB key、驗證碼、登陸密碼、支付密碼等一系列屏障,支付流程要複雜得多,安全係數也高很多。

CSRF攻擊防禦:

1、將cookie設置爲HttpOnly

  CSRF攻擊很大程度是利用了瀏覽器的cookie,爲了防止站內XSS漏洞,cookie設置HttpOnly屬性,JS腳本就無法讀取到cookie中的信息,避免攻擊者僞造cookie的情況出現。

2、增加token

  CSRF攻擊之所以成功,主要是攻擊中僞造了用戶請求,而用戶請求的驗證信息都在cookie中,攻擊者就可以利用cookie僞造請求通過安全驗證。因此抵禦CSRF攻擊的關鍵就是,在請求中放入攻擊者不能僞造的信息,並且信息不在cookie中。
  鑑於此,開發人員可以在http請求中以參數的形式加一個token,此token在服務端生成,也在服務端校驗,服務端的每次會話都可以用同一個token。如果驗證token不一致,則認爲至CSRF攻擊,拒絕請求。

3、通過Referer識別

  Http頭中有一個字段Referer,它記錄了Http請求來源地址。但是注意不要把Rerferer用在身份驗證或者其他非常重要的檢查上,因爲Rerferer非常容易在客戶端被改變。

(火狐的一個插件RefControl修改Referer引用)

1. SQL注入攻擊

  SQL注入攻擊就是把SQL命令僞裝成正常的http請求參數,傳遞到服務端,欺騙服務器最終執行惡意的SQL命令,達到入侵目的。

SQL注入攻擊原理如下:

String sql = "select * from user where nick = '" + nickname + "' and password = '" + password + "'";

  上述代碼是校驗用戶名、密碼是否有效,查詢結果記錄數大於0則表示有效。正常邏輯是用戶名、密碼匹配數據庫記錄;但攻擊者會利用http參數進行SQL注入攻擊,即password參數輸入’ or ‘1’ = '1,導致SQL語句變爲

select * from user where nick = 'zhangshan' and password = '' or '1' = '1';

  上述語句的執行結果就相當於用戶能夠繞過登錄驗證。

SQL注入防範

1、使用SqlParameter代替普通的字符串拼接

2、使用ORM框架

2. 文件上傳漏洞

  倘若web網站沒有對文件類型進行嚴格的校驗,導致可執行文件上傳到了服務器,惡意程序就會執行。
  爲了避免惡意文件上傳,需要對上傳文件類型進行白名單校驗,並限制文件大小,上傳文件進行重命名。有關文件類型的校驗,需要去了解下魔數(magic number)這個概念,這裏不做引伸。

1. DDoS攻擊

1、SYN flood

  攻擊者僞造大量無效IP,不斷與目標主機建立TCP鏈接,導致服務器維護了一個非常大的鏈接等待列表,佔用大量系統資源,直至新鏈接無法建立。
  這種攻擊是利用了TCP三次握手的異常處理機制,即第三次握手,服務端在沒有收到客戶端ACK報文時,服務端會進行多次SYN+ACK重試,然後維護一個等待列表,而系統會爲即將建立的TCP連接分配一部分資源。資源耗盡,系統也就無法再建立TCP連接。

2、DNS query flood

  攻擊者僞造大量無效域名,發送給目標服務器解析,這些域名均爲無效域名,導致DNS服務器耗用大量資源去處理這些無效域名,造成DNS解析域名超時,達到攻擊目的。

2. 其他攻擊手段

  攻擊手段永遠都比防禦方法多得多。因此平時的業務中需要及時的添加各種攻擊防禦策略。

二. 數據傳輸安全性問題與解決辦法

1. 竊聽

  A和B在互聯網傳輸數據時,A向B發送的消息可能會在傳輸過程中被C偷看。C的行爲稱爲“竊聽”。

2. 假冒

  A和B在互聯網傳輸數據時,B收到的消息不一定是A發送的,也有可能是C發送的。C的行爲稱爲“假冒”。

3. 篡改

  A和B在互聯網傳輸數據時,B收到的消息有可能被C截獲並且進行來修改。C的行爲稱爲“篡改”。

4. 事後否認

  A和B在互聯網傳輸數據時,B收到了A的惡意信息,但是事後A不承認自己發送來惡意信息。A的行爲稱爲“事後否認”

  解決辦法: 點擊此處瞭解以上數據傳輸安全問題的解決辦法.

  
  
  
  

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