一江耀、信息安全三要素
任何完整的信息安全體系网缝,都需要遵循CIA原則垮刹,即保密性(Confidentiality)、完整性(Integrity)鸵隧、可用性(Availability)绸罗。
- 保密性:對需要保護的數(shù)據(jù)(如用戶的私人信息等)進行保密操作,無論存儲還是傳輸豆瘫,都要保證用戶數(shù)據(jù)及相關(guān)資源的安全珊蟀。通常使用加密等手段保證數(shù)據(jù)的安全。
- 完整性: 訪問的數(shù)據(jù)要是完整的外驱,沒有缺失或被篡改育灸。可以對數(shù)據(jù)進行簽名和校驗(比如MD5和數(shù)字簽名等)昵宇。
- 可用性:服務(wù)必須可用磅崭。可以使用訪問控制瓦哎、限流等手段保證服務(wù)的可用性砸喻。
二、常見的網(wǎng)絡(luò)攻擊
網(wǎng)絡(luò)攻擊大體可以分為非破壞性攻擊和破壞性攻擊蒋譬。非破壞性攻擊一般是為了擾亂系統(tǒng)的運行割岛,使之暫時失去正常對外提供服務(wù)的能力,比如DDoS攻擊等羡铲;破壞性攻擊注意會造成兩種后果:系統(tǒng)數(shù)據(jù)受損或信息被竊取蜂桶,比如CSRF等。
DDoS
DDoS(Distributed Denial of Service也切,分布式拒絕服務(wù))主要通過大量合法的請求占用大量網(wǎng)絡(luò)資源扑媚,從而使合法用戶無法得到服務(wù)的響應(yīng),是目前最強大雷恃、最難防御的攻擊之一疆股。其攻擊效果:
- 占滿網(wǎng)絡(luò)帶寬
- 提交大量請求,使服務(wù)器超負(fù)荷運行倒槐,響應(yīng)緩慢
- 阻斷某一用戶訪問服務(wù)器
- 阻斷某服務(wù)與特定系統(tǒng)或個人的通訊
防范思路:
1旬痹、 請求攔截,包括:硬件防火墻、HTTP請求限流(如阿里的開源中間件sentinel)等
2两残、使用CDN
3永毅、帶寬擴容
4、實時監(jiān)控等
SQL注入
SQL注入是由于未將代碼與數(shù)據(jù)進行嚴(yán)格的隔離人弓,導(dǎo)致在讀取用戶數(shù)據(jù)的時候沼死,錯誤地將數(shù)據(jù)作為代碼的一部分執(zhí)行,從而導(dǎo)致的安全問題崔赌。最常見的例子是當(dāng)對SQL語句進行字符串拼接操作時意蛀,直接使用未加轉(zhuǎn)義的用戶輸入內(nèi)容作為變量,從而可能出現(xiàn)drop健芭、delete等意想不到的結(jié)果县钥。
防范思路:
1、過濾用戶輸入?yún)?shù)中的特殊字符慈迈,從而降低被SQL注入的風(fēng)險
2若贮、禁止通過字符串拼接的SQL語句,嚴(yán)格使用參數(shù)綁定傳入的SQL參數(shù)
3吩翻、合理使用數(shù)據(jù)庫訪問框架提供的防范注入機制兜看。比如Mybatis提供的#{}
XSS
跨站腳本攻擊(Cross-Site Scripting):為了和CSS區(qū)分開,所以簡稱為XSS狭瞎。它是指黑客通過技術(shù)手段,向正常用戶請求的HTML頁面中插入惡意腳本搏予,從而可以執(zhí)行任意腳本熊锭,達(dá)到信息竊取、破壞等目的雪侥。
主要防范思路是對用戶輸入數(shù)據(jù)做過濾或轉(zhuǎn)義碗殷,且需要前后端開發(fā)人員共同配合。比如后端開發(fā)可以使用Jsoup速缨、Spring框架的HtmlUtils等框架工具做過濾或轉(zhuǎn)義锌妻;前端使用安全的API展示數(shù)據(jù),比如innerText而不是innerHTML等旬牲。
CSRF
跨站請求偽造(Cross-Site Request Forgery):在用戶不知情的情況下仿粹,冒充用戶發(fā)起請求,在當(dāng)前已登錄的Web應(yīng)用程序中執(zhí)行惡意操作原茅,如惡意發(fā)帖吭历、修改密碼、發(fā)郵件擂橘、甚至利用網(wǎng)銀登陸信息進行轉(zhuǎn)賬等晌区。
和XSS的區(qū)別:XSS是在正常用戶的HTML頁面中執(zhí)行黑客提供的惡意代碼,問題在于沒有對用戶數(shù)據(jù)過濾、轉(zhuǎn)移朗若;而CSRF是黑客直接盜用用戶瀏覽器中的登陸信息恼五,冒充用戶去執(zhí)行黑客的指定操作,問題出在HTTP接口沒有防范不受信任的調(diào)用哭懈。
防范思路:
1唤冈、CSRF Token驗證:利用瀏覽器的同源機制,在HTTP接口執(zhí)行前驗證頁面或者Cookie中設(shè)置的Token
2银伟、人機交互:比如在調(diào)用網(wǎng)銀轉(zhuǎn)賬接口時校驗短信驗證碼
三你虹、HTTPS
HTTP的不足:
- 通信使用明文,內(nèi)容可能會被竊聽
- 不驗證通信方的身份彤避,因此有可能遭遇偽裝
- 無法證明報文的完整性傅物,有可能已遭篡改
因此當(dāng)前網(wǎng)站的主流文本傳輸協(xié)議都使用HTTPS了。HTTPS的全稱是HTTP over SSL琉预,即在HTTP傳輸上增加了SSL協(xié)議的加密能力董饰。SSL(Secure Socket Layer)協(xié)議工作于傳輸層與應(yīng)用層之間,為應(yīng)用提供數(shù)據(jù)的加密傳輸圆米。
要理解HTTPS的傳輸機制卒暂,需要先理解對稱加密與非對稱加密算法(這里就不作展開)。另一個重要概念是數(shù)字證書娄帖,是由CA(Certificate Authoriry)頒發(fā)的HTTPS證書也祠,用于證明信息傳輸方的身份,防止傳輸過程中的公鑰和密文被替換近速。
訪問一個HTTPS網(wǎng)站的大致流程如下:
1诈嘿、瀏覽器向服務(wù)器發(fā)送請求,請求中包括瀏覽器支持的協(xié)議削葱,并附帶一個隨機數(shù)(作為客戶端公鑰)
2奖亚、服務(wù)器收到請求后,選擇某種非對稱加密算法析砸,把數(shù)字證書簽名公鑰昔字、身份信息發(fā)送給瀏覽器,同時也附帶一個隨機數(shù)(作為服務(wù)端公鑰)
3首繁、瀏覽器收到后:
3.1 首先驗證證書的真實性作郭,如果服務(wù)端的CA機構(gòu)存在于瀏覽器的受信任CA機構(gòu)列表中瘟裸,并且服務(wù)器證書中的信息與當(dāng)前正在訪問的網(wǎng)站(域名等)一致祭衩,則認(rèn)為服務(wù)端是可信的
3.2 生成客戶端的公私鑰、會話密鑰
3.3 使用服務(wù)端公鑰加密{客戶端公鑰锋八,客戶端會話密鑰}挂捅,并給服務(wù)端
4堂湖、服務(wù)器收到后:
4.1 使用服務(wù)端私鑰解密{客戶端公鑰,客戶端會話密鑰}
4.2 使用之前的隨機數(shù)生成服務(wù)端會話密鑰
4.3 使用客戶端公鑰加密服務(wù)端密鑰状土,并發(fā)送給客戶端
5、后續(xù)所有的信息發(fā)送都是以對稱加密方式進行