初探計算機網絡之常見的網絡攻擊方式

信息安全

黑客與安全

​ 在當今的互聯網當中,總是存在着我們看不見也摸不着的一些 「互聯網地下工作者」,也就是黑客。黑客的攻擊方式分為很多種,有非破壞性攻擊破壞性攻擊非破壞性攻擊一般是為了擾亂系統的執行,使之暫時失去正常正常對外界提供服務的能力,比如臭名昭著的DDoS攻擊等。而破壞性攻擊主要會造成兩種結果:系統數據受損或者信息被竊取,好比如CSRF攻擊等。黑客使用的攻擊大致可分為三種,植入病毒式洪水式(大幅度攻擊)系統漏洞式

​ 他們攻擊的特點主要集中於:分佈式高流量深度匿名。就好比如DDoS攻擊,利用的就是國外大量的「肉雞」計算機的信息沒有登記,所以黑客再利用「肉雞」進行互聯網攻擊,是很難去追尋攻擊的地址,無法有效地抵禦他們的攻擊。雖然說現在雲端服務器商開始崛起,能夠提供一套完整的安全解決方案,如騰訊雲、阿里雲等等,都能夠提供高防服務器來抵禦市面上大多數的DDoS攻擊,但是成本略高,對於大多數小中型企業是有點難以承受。

1633500061989

​ 即使這樣,互聯網企業要想建立一套完整的信息安全體系,都需要遵守CIA原則,分別為保密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。

  • 保密性:對與一些涉及用戶隱私、有價值的數據進行保密操作,無論是信息存儲還是傳輸過程,都要保證好用戶數據及相關資源的安全。值得一提的是,數據加密有些時候不只是防外部的黑客,還需要避免數據管理員在某些利益的驅動下,對數據庫里的信息篡改或者泄露,進一步導致黑客利用這些數據進行網站襲擊,造成企業的巨大損失。
  • 完整性:用戶訪問的數據是要完整的,而不是缺失的或是篡改的,不然會導致用戶訪問到的數據是不正確的。在實際編碼中,我們為了保證數據的完整性,通常使用的方法是對數據進行簽名校驗加密加鹽值等等(比如MD5/SHA和數據簽名等)
  • 可用性:服務是能夠保證可用的,如果連服務都不能正常使用,保證數據安全更是天方夜譚。而有可能導致服務不可用的一大因素是高並發,針對於這種情況,我們通常使用都是對進入的請求加以約束,如網頁操作時間限制請求限流數據清洗等方式。

SQL注入

​ SQL注入是注入式攻擊中算是比較常見的了,不過隨着開發人員的安全意識普遍提高,開始重視這些問題,再加上MyBatis等框架大幅度推廣,SQL注入攻擊比以前要少了很多。SQL注入攻擊的原理是程序方面未將代碼與數據進行嚴格的隔離,導致在請求數據的時候,將數據嵌套到代碼中的一部分去執行,從而導致一些意想不到的問題。舉個例子,當對用戶數據進行修改操作時,直接將未轉義的數據當成變量進行操作,代碼演示:

update t_user set nick_name = "\"# -- !#(@ " where user_id = 123;

OR

select * from t_user where (user_name= '1' OR '1'='1') and (password = '1' OR '1'='1');

​ 第一種sql語句,會導致t_user表中nick_name全部被修改;第二種情況,會無視賬號密碼的情況,直接得到用戶信息;還有很多種SQL注入的情況,在這裡就不一一贅述了。下面講講怎麼去抵禦這種攻擊:

  1. 過濾出用戶在網頁輸入數據時摻雜的特殊字符,進而避免出現轉義數據的風險。
  2. 業務編碼時,避免使用字符串拼接的SQL語句,最好採用參數綁定傳入的SQL參數。
  3. 合理使用數據庫訪問框架提供的防注入機制。如MyBatis提供的#{}動態參數,從而有效地防止SQL注入。同時也要注意${}的使用,${}相當於佔位符,等同於使用字符串拼接SQL。

XSS

XSS攻擊,又稱跨站腳本攻擊,英譯為 Cross-Site Scripting,這是為了避免跟前端語言CSS的簡稱衝突,所以另命名為XSS。XSS是指黑客提供某些技術手段,向正常用戶請求的網頁植入惡意腳本,從而在此基礎上執行任意腳本,主要用於信息竊取、破壞等目的。XSS主要分為反射型XSS存儲型XSSDOM型XSS

​ 在防範XSS攻擊上,主要還是通過在用戶輸入數據做過濾轉義方面下功夫。後端:可以使用Jsoup框架對輸入的字符串進行XSS過濾或者使用Spring框架提供的HtmlUtils工具類對字符串進行HTML轉義。前端:儘可能使用innerText而不是innerHTML

CSRF

CSRF攻擊,又稱跨站請求偽造,全稱為 Cross-Site Request Forgery,也全稱為 One-click Attack,即在用戶毫不知情的情況下,假冒用戶來模擬操作,對已經成功登錄的網頁上惡意操作,如發表惡意帖子、修改個人信息、群發信息甚至修改密碼等等。

​ 雖然從攻擊層面上看,兩者有很多相似之處,但是CSRF還是有別於XSS的。從技術層面上看,XSS是指黑客在用戶請求的網頁植入了自己的惡意腳本;而CSRF是指假冒已經成功登錄的用戶進行 「為所欲為」 的操作

  • XSS的關注點是在於用戶數據沒有進行過濾或轉義
  • CSRF的關注點是在於HTTP接口沒有防範不受信任的調用。

防範CSRF攻擊主要有以下兩種方式:

  1. CSRF Token驗證,利用瀏覽器的同源策略(不同源的客戶端腳本無法在沒有授權的情況下,直接讀取對方資源),在HTTP接口執行前驗證頁面或者Cookie中設置的Token,只有驗證通過才繼續執行請求。
  2. 人機接口,常見的就是在用戶在進行相關重要操作(如修改密碼、下單購買)校驗短訊驗證碼