黑客與安全
在當今的互聯網當中,總是存在著我們看不見也摸不著的一些 “互聯網地下工作者”,也就是黑客。黑客的攻擊方式分為很多種,有非破壞性攻擊和破壞性攻擊。非破壞性攻擊一般是為了擾亂系統的執行,使之暫時失去正常正常對外界提供服務的能力,比如臭名昭著的DDoS攻擊等。而破壞性攻擊主要會造成兩種結果:系統數據受損或者信息被竊取,好比如CSRF攻擊等。黑客使用的攻擊大致可分為三種,植入病毒式、洪水式(大幅度攻擊)、系統漏洞式。
?他們攻擊的特點主要集中于:分布式、高流量、深度匿名。就好比如DDoS攻擊,利用的就是國外大量的“肉雞”計算機的信息沒有登記,所以黑客再利用“肉雞”進行互聯網攻擊,是很難去追尋攻擊的地址,無法有效地抵御他們的攻擊。雖然說現在云端服務器商開始崛起,能夠提供一套完整的安全解決方案,如騰訊云、阿里云等等,都能夠提供高防服務器來抵御市面上大多數的DDoS攻擊,但是成本略高,對于大多數小中型企業是有點難以承受。
?即使這樣,互聯網企業要想建立一套完整的信息安全體系,都需要遵守CIA原則,分別為保密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。
保密性:對與一些涉及用戶隱私、有價值的數據進行保密操作,無論是信息存儲還是傳輸過程,都要保證好用戶數據及相關資源的安全。值得一提的是,數據加密有些時候不只是防外部的黑客,還需要避免數據管理員在某些利益的驅動下,對數據庫里的信息篡改或者泄露,進一步導致黑客利用這些數據進行網站襲擊,造成企業的巨大損失。
完整性:用戶訪問的數據是要完整的,而不是缺失的或是篡改的,不然會導致用戶訪問到的數據是不正確的。在實際編碼中,我們為了保證數據的完整性,通常使用的方法是對數據進行簽名校驗、加密加鹽值等等(比如MD5/SHA和數據簽名等)
可用性:服務是能夠保證可用的,如果連服務都不能正常使用,保證數據安全更是天方夜譚。而有可能導致服務不可用的一大因素是高并發,針對于這種情況,我們通常使用都是對進入的請求加以約束,如網頁操作時間限制、請求限流、數據清洗等方式。
SQL注入
?SQL注入是注入式攻擊中算是比較常見的了,不過隨著開發人員的安全意識普遍提高,開始重視這些問題,再加上MyBatis等框架大幅度推廣,SQL注入攻擊比以前要少了很多。SQL注入攻擊的原理是程序方面未將代碼與數據進行嚴格的隔離,導致在請求數據的時候,將數據嵌套到代碼中的一部分去執行,從而導致一些意想不到的問題。舉個例子,當對用戶數據進行修改操作時,直接將未轉義的數據當成變量進行操作,代碼演示:
updatet_usersetnick_name =""# -- !#(@ " where user_id = 123;
OR
select*fromt_userwhere(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攻擊主要有以下兩種方式:
(1)CSRF Token驗證,利用瀏覽器的同源策略(不同源的客戶端腳本無法在沒有授權的情況下,直接讀取對方資源),在HTTP接口執行前驗證頁面或者Cookie中設置的Token,只有驗證通過才繼續執行請求。
(2)人機接口,常見的就是在用戶在進行相關重要操作(如修改密碼)校驗短信驗證碼
寫在最后:對于準備成為一名優秀程序員的朋友,如果你想更好地提升你的編程核心能力(內功),讓自己成為一個具有真材實料的厲害的程序員,不妨從現在開始!C/C++,永不過時的編程語言~