計(jì)算機(jī)網(wǎng)絡(luò):常見(jiàn)的網(wǎng)絡(luò)攻擊方式!黑客慣用的伎倆
黑客與安全
在當(dāng)今的互聯(lián)網(wǎng)當(dāng)中,總是存在著我們看不見(jiàn)也摸不著的一些 “互聯(lián)網(wǎng)地下工作者”,也就是黑客。黑客的攻擊方式分為很多種,有非破壞性攻擊和破壞性攻擊。非破壞性攻擊一般是為了擾亂系統(tǒng)的執(zhí)行,使之暫時(shí)失去正常正常對(duì)外界提供服務(wù)的能力,比如臭名昭著的DDoS攻擊等。而破壞性攻擊主要會(huì)造成兩種結(jié)果:系統(tǒng)數(shù)據(jù)受損或者信息被竊取,好比如CSRF攻擊等。黑客使用的攻擊大致可分為三種,植入病毒式、洪水式(大幅度攻擊)、系統(tǒng)漏洞式。

他們攻擊的特點(diǎn)主要集中于:分布式、高流量、深度匿名。就好比如DDoS攻擊,利用的就是國(guó)外大量的“肉雞”計(jì)算機(jī)的信息沒(méi)有登記,所以黑客再利用“肉雞”進(jìn)行互聯(lián)網(wǎng)攻擊,是很難去追尋攻擊的地址,無(wú)法有效地抵御他們的攻擊。雖然說(shuō)現(xiàn)在云端服務(wù)器商開(kāi)始崛起,能夠提供一套完整的安全解決方案,如騰訊云、阿里云等等,都能夠提供高防服務(wù)器來(lái)抵御市面上大多數(shù)的DDoS攻擊,但是成本略高,對(duì)于大多數(shù)小中型企業(yè)是有點(diǎn)難以承受。

即使這樣,互聯(lián)網(wǎng)企業(yè)要想建立一套完整的信息安全體系,都需要遵守CIA原則,分別為保密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。
保密性:對(duì)與一些涉及用戶隱私、有價(jià)值的數(shù)據(jù)進(jìn)行保密操作,無(wú)論是信息存儲(chǔ)還是傳輸過(guò)程,都要保證好用戶數(shù)據(jù)及相關(guān)資源的安全。值得一提的是,數(shù)據(jù)加密有些時(shí)候不只是防外部的黑客,還需要避免數(shù)據(jù)管理員在某些利益的驅(qū)動(dòng)下,對(duì)數(shù)據(jù)庫(kù)里的信息篡改或者泄露,進(jìn)一步導(dǎo)致黑客利用這些數(shù)據(jù)進(jìn)行網(wǎng)站襲擊,造成企業(yè)的巨大損失。
完整性:用戶訪問(wèn)的數(shù)據(jù)是要完整的,而不是缺失的或是篡改的,不然會(huì)導(dǎo)致用戶訪問(wèn)到的數(shù)據(jù)是不正確的。在實(shí)際編碼中,我們?yōu)榱吮WC數(shù)據(jù)的完整性,通常使用的方法是對(duì)數(shù)據(jù)進(jìn)行簽名校驗(yàn)、加密加鹽值等等(比如MD5/SHA和數(shù)據(jù)簽名等)
可用性:服務(wù)是能夠保證可用的,如果連服務(wù)都不能正常使用,保證數(shù)據(jù)安全更是天方夜譚。而有可能導(dǎo)致服務(wù)不可用的一大因素是高并發(fā),針對(duì)于這種情況,我們通常使用都是對(duì)進(jìn)入的請(qǐng)求加以約束,如網(wǎng)頁(yè)操作時(shí)間限制、請(qǐng)求限流、數(shù)據(jù)清洗等方式。

SQL注入
SQL注入是注入式攻擊中算是比較常見(jiàn)的了,不過(guò)隨著開(kāi)發(fā)人員的安全意識(shí)普遍提高,開(kāi)始重視這些問(wèn)題,再加上MyBatis等框架大幅度推廣,SQL注入攻擊比以前要少了很多。SQL注入攻擊的原理是程序方面未將代碼與數(shù)據(jù)進(jìn)行嚴(yán)格的隔離,導(dǎo)致在請(qǐng)求數(shù)據(jù)的時(shí)候,將數(shù)據(jù)嵌套到代碼中的一部分去執(zhí)行,從而導(dǎo)致一些意想不到的問(wèn)題。舉個(gè)例子,當(dāng)對(duì)用戶數(shù)據(jù)進(jìn)行修改操作時(shí),直接將未轉(zhuǎn)義的數(shù)據(jù)當(dāng)成變量進(jìn)行操作,代碼演示:
updatet_usersetnick_name ="\"# -- !#(@ " where user_id = 123;
OR
select*fromt_userwhere(user_name='1'OR'1'='1')and(password='1'OR'1'='1');
第一種sql語(yǔ)句,會(huì)導(dǎo)致t_user表中nick_name全部被修改;第二種情況,會(huì)無(wú)視賬號(hào)密碼的情況,直接得到用戶信息;還有很多種SQL注入的情況,在這里就不一一贅述了。下面講講怎么去抵御這種攻擊:
過(guò)濾出用戶在網(wǎng)頁(yè)輸入數(shù)據(jù)時(shí)摻雜的特殊字符,進(jìn)而避免出現(xiàn)轉(zhuǎn)義數(shù)據(jù)的風(fēng)險(xiǎn)。
業(yè)務(wù)編碼時(shí),避免使用字符串拼接的SQL語(yǔ)句,最好采用參數(shù)綁定傳入的SQL參數(shù)。
合理使用數(shù)據(jù)庫(kù)訪問(wèn)框架提供的防注入機(jī)制。如MyBatis提供的#{}動(dòng)態(tài)參數(shù),從而有效地防止SQL注入。同時(shí)也要注意${}的使用,${}相當(dāng)于占位符,等同于使用字符串拼接SQL。

XSS
XSS攻擊,又稱跨站腳本攻擊,英譯為Cross-Site Scripting,這是為了避免跟前端語(yǔ)言CSS的簡(jiǎn)稱沖突,所以另命名為XSS。XSS是指黑客提供某些技術(shù)手段,向正常用戶請(qǐng)求的網(wǎng)頁(yè)植入惡意腳本,從而在此基礎(chǔ)上執(zhí)行任意腳本,主要用于信息竊取、破壞等目的。XSS主要分為反射型XSS、存儲(chǔ)型XSS和DOM型XSS。
在防范XSS攻擊上,主要還是通過(guò)在用戶輸入數(shù)據(jù)做過(guò)濾或轉(zhuǎn)義方面下功夫。后端:可以使用Jsoup框架對(duì)輸入的字符串進(jìn)行XSS過(guò)濾或者使用Spring框架提供的HtmlUtils工具類對(duì)字符串進(jìn)行HTML轉(zhuǎn)義。前端:盡可能使用innerText而不是innerHTML。

CSRF
CSRF攻擊,又稱跨站請(qǐng)求偽造,全稱為 Cross-Site Request Forgery,也全稱為 One-click Attack,即在用戶毫不知情的情況下,假冒用戶來(lái)模擬操作,對(duì)已經(jīng)成功登錄的網(wǎng)頁(yè)上惡意操作,如發(fā)表惡意帖子、修改個(gè)人信息、群發(fā)信息甚至修改密碼等等。
雖然從攻擊層面上看,兩者有很多相似之處,但是CSRF還是有別于XSS的。從技術(shù)層面上看,XSS是指黑客在用戶請(qǐng)求的網(wǎng)頁(yè)植入了自己的惡意腳本;而CSRF是指假冒已經(jīng)成功登錄的用戶進(jìn)行 “為所欲為” 的操作。
XSS的關(guān)注點(diǎn)是在于用戶數(shù)據(jù)沒(méi)有進(jìn)行過(guò)濾或轉(zhuǎn)義
CSRF的關(guān)注點(diǎn)是在于HTTP接口沒(méi)有防范不受信任的調(diào)用。
防范CSRF攻擊主要有以下兩種方式:
(1)CSRF Token驗(yàn)證,利用瀏覽器的同源策略(不同源的客戶端腳本無(wú)法在沒(méi)有授權(quán)的情況下,直接讀取對(duì)方資源),在HTTP接口執(zhí)行前驗(yàn)證頁(yè)面或者Cookie中設(shè)置的Token,只有驗(yàn)證通過(guò)才繼續(xù)執(zhí)行請(qǐng)求。
(2)人機(jī)接口,常見(jiàn)的就是在用戶在進(jìn)行相關(guān)重要操作(如修改密碼)校驗(yàn)短信驗(yàn)證碼
寫在最后:對(duì)于準(zhǔn)備成為一名優(yōu)秀程序員的朋友,如果你想更好的提升你的編程核心能力(內(nèi)功),讓自己成為一個(gè)具有真材實(shí)料的厲害的程序員,不妨從現(xiàn)在開(kāi)始!C/C++,永不過(guò)時(shí)的編程語(yǔ)言~
微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地
C語(yǔ)言零基礎(chǔ)入門教程(83集全):https://www.bilibili.com/video/BV1yb4y197tm?spm_id_from=333.999.0.0
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
