初探計算機網絡之常見的網絡攻擊方式
信息安全
黑客與安全
在當今的互聯網當中,總是存在着我們看不見也摸不着的一些 「互聯網地下工作者」,也就是黑客。黑客的攻擊方式分為很多種,有非破壞性攻擊
和破壞性攻擊
。非破壞性攻擊
一般是為了擾亂系統的執行,使之暫時失去正常正常對外界提供服務的能力,比如臭名昭著的DDoS
攻擊等。而破壞性攻擊
主要會造成兩種結果:系統數據受損或者信息被竊取,好比如CSRF
攻擊等。黑客使用的攻擊大致可分為三種,植入病毒式
、洪水式(大幅度攻擊)
、系統漏洞式
。
他們攻擊的特點主要集中於:分佈式
、高流量
、深度匿名
。就好比如DDoS
攻擊,利用的就是國外大量的「肉雞」計算機的信息沒有登記,所以黑客再利用「肉雞」進行互聯網攻擊,是很難去追尋攻擊的地址,無法有效地抵禦他們的攻擊。雖然說現在雲端服務器商開始崛起,能夠提供一套完整的安全解決方案,如騰訊雲、阿里雲等等,都能夠提供高防服務器來抵禦市面上大多數的DDoS
攻擊,但是成本略高,對於大多數小中型企業是有點難以承受。
即使這樣,互聯網企業要想建立一套完整的信息安全體系,都需要遵守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注入的情況,在這裡就不一一贅述了。下面講講怎麼去抵禦這種攻擊:
- 過濾出用戶在網頁輸入數據時摻雜的特殊字符,進而避免出現轉義數據的風險。
- 業務編碼時,避免使用字符串拼接的SQL語句,最好採用參數綁定傳入的SQL參數。
- 合理使用數據庫訪問框架提供的防注入機制。如
MyBatis
提供的#{}
動態參數,從而有效地防止SQL注入。同時也要注意${}的使用,${}相當於佔位符,等同於使用字符串拼接SQL。
XSS
XSS攻擊
,又稱跨站腳本攻擊
,英譯為 Cross-Site Scripting
,這是為了避免跟前端語言CSS的簡稱衝突,所以另命名為XSS。XSS是指黑客提供某些技術手段,向正常用戶請求的網頁植入惡意腳本,從而在此基礎上執行任意腳本
,主要用於信息竊取、破壞等目的。XSS主要分為反射型XSS
、存儲型XSS
和DOM型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攻擊
主要有以下兩種方式:
CSRF Token驗證,利用瀏覽器的同源策略(不同源的客戶端腳本無法在沒有授權的情況下,直接讀取對方資源),在HTTP接口執行前驗證頁面或者Cookie中設置的Token,只有驗證通過才繼續執行請求。
人機接口,常見的就是在用戶在進行相關重要操作(如修改密碼、下單購買)校驗短訊驗證碼