


摘? ?要:在注重用戶體驗的Web 2.0時代,網(wǎng)站信息安全問題應(yīng)該引起人們足夠的重視。文章從SQL注入攻擊、數(shù)據(jù)庫的拖庫和撞庫風(fēng)險、HTTP協(xié)議自身的安全缺陷、文件上傳漏洞、跨站腳本攻擊等多個方面,對網(wǎng)站可能存在的信息安全問題進行了詳盡的分析,并針對各種信息安全問題給出了切實可行的防護對策,以期對加強網(wǎng)站信息安全工作起到拋磚引玉的作用。
關(guān)鍵詞:網(wǎng)站信息安全;SQL注入攻擊;撞庫攻擊;HTTPS;文件上傳漏洞;跨站腳本攻擊
中圖分類號: TP3? ? ? ? ? 文獻標識碼:A
Abstract: In such an era of WEB 2.0 that developers focus on user experience, people should pay more and more attention to website information security. This paper makes a detailed analysis of SQL injection attack, account credential enumeration attack, HTTP protocol security defects, file upload attack, XSS attack, etc. Finally, the feasible protective countermeasures are given for all kinds of information security issues, which hopes to strengthen website information security.
Key words: website information security; SQL injection attack; account credential enumeration attack; HTTPS; file upload attack; XSS attack
1 引言
隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,提供各種服務(wù)的網(wǎng)站如雨后春筍般地不斷涌現(xiàn)。根據(jù)《2020年第45次中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》數(shù)據(jù)顯示,截止2019年12月,我國網(wǎng)站數(shù)量為497萬個,網(wǎng)頁數(shù)量為2978億個,網(wǎng)民規(guī)模達9.04億,互聯(lián)網(wǎng)應(yīng)用呈現(xiàn)快速增長態(tài)勢[1]。但是,也可以從報告中看到,境內(nèi)被篡改的網(wǎng)站數(shù)量多達185,573個,被植入后門的網(wǎng)站數(shù)量高達84,850個。在注重用戶體驗的Web 2.0時代,網(wǎng)站信息安全問題應(yīng)該引起人們足夠的重視。網(wǎng)站信息安全既關(guān)乎9.04億網(wǎng)民的切身利益,又關(guān)系到互聯(lián)網(wǎng)生態(tài)的健康發(fā)展。
2 網(wǎng)站信息安全問題分析
2.1 SQL注入攻擊
SQL注入攻擊是目前危害最嚴重的Web網(wǎng)站攻擊方式之一,通過把SQL命令插入到用戶輸入?yún)?shù)中,當服務(wù)器程序?qū)⒂脩糨斎雲(yún)?shù)直接作為查詢條件,并拼接SQL語句向數(shù)據(jù)庫查詢返回結(jié)果時,攻擊者便可以欺騙服務(wù)端進行惡意操作[2]。例如,用戶在登錄頁面提交用戶名和密碼口令供服務(wù)器驗證時,正常的SQL查詢語句應(yīng)該是:
sqlQuery = "SELECT * FROM users WHERE name = '" + userName + "' and pwd = '"+ passWord +"';"
如果攻擊者將用戶名和密碼分別設(shè)為userName = "1' OR '1'='1"和passWord = "1' OR '1'='1",那么實際執(zhí)行的SQL查詢語句則變?yōu)椋?/p>
sqlQuery = "SELECT * FROM users WHERE name = '1' OR '1'='1' and pwd = '1' OR '1'='1';"
可以看到查詢判斷條件恒為真,從而繞過系統(tǒng)檢測達到欺騙目的。SQL注入攻擊分為:基于報錯的SQL注入、聯(lián)合查詢SQL注入、堆疊查詢SQL注入、基于布爾的SQL盲注、基于時間的SQL盲注等。
一旦SQL注入成功,攻擊者便可以竊取、篡改或刪除網(wǎng)站數(shù)據(jù),甚至拿下WebShell,對站點服務(wù)器擁有絕對的控制權(quán),其破壞力不可小覷。
2.2 網(wǎng)站數(shù)據(jù)庫遭遇拖庫和撞庫風(fēng)險
所謂拖庫是指網(wǎng)站遭到入侵后,黑客將該網(wǎng)站數(shù)據(jù)庫里的用戶賬號和密碼等敏感信息導(dǎo)出并存放到網(wǎng)上供人下載,而撞庫是指黑客通過收集大量已泄露的用戶賬號和密碼,將其生成對應(yīng)的字典表,用它嘗試批量登錄其他網(wǎng)站[3]。
震驚業(yè)界的CSDN“拖庫”事件中,有600萬個注冊用戶的電子信箱賬戶和密碼等信息被泄露,之后多家著名網(wǎng)站的用戶信息被上傳到網(wǎng)絡(luò)供用戶下載。很多用戶習(xí)慣在不同的網(wǎng)站使用相同的電子信箱賬號和密碼,因此如果在一家網(wǎng)站服務(wù)器上的信息被黑客攻破,該用戶在其他網(wǎng)站的個人真實財產(chǎn)和網(wǎng)上虛擬財產(chǎn)也同樣面臨巨大風(fēng)險。
如果網(wǎng)站數(shù)據(jù)庫存儲的用戶信息未經(jīng)數(shù)據(jù)脫敏[4]處理,那么它被拖庫和撞庫的風(fēng)險極大,并且撞庫攻擊的成本和技術(shù)門檻都非常低。
2.3 HTTP協(xié)議自身的安全缺陷
HTTP缺省工作在TCP協(xié)議的80端口,用戶訪問網(wǎng)站http://打頭的都是標準HTTP服務(wù),HTTP所封裝的信息是明文傳送的,客戶端和服務(wù)器端都無法驗證對方的身份,通過抓包工具可以獲取傳輸信息的內(nèi)容。
如圖1所示,以POST方式向服務(wù)器提交用戶名和保密碼,利用Chrome瀏覽器自帶的抓包工具,可以很方便地獲取到用戶提交的登錄數(shù)據(jù)。可以看到用戶的敏感數(shù)據(jù)并未加密,而是采用明文傳輸。
由于HTTP協(xié)議缺乏必要的認證機制,可以通過截獲HTTP POST請求包來偽造響應(yīng)包的信息,接管交互會話,以達到會話劫持和內(nèi)容竊聽、篡改的目的[5]。
2.4 文件上傳漏洞
文件上傳漏洞[6]是指系統(tǒng)程序沒有對上傳權(quán)限做出合理判斷,或者沒有對上傳的文件后綴及文件類型做嚴格的限制,導(dǎo)致攻擊者可以上傳含有惡意腳本的圖片文件,甚至是動態(tài)網(wǎng)頁文件,從而為攻擊者獲取網(wǎng)站后門(即WebShell)創(chuàng)造了便利條件。
攻擊者將后門文件與服務(wù)器正常文件混在一起,使用瀏覽器像訪問正常網(wǎng)頁一樣來訪問這些后門,服務(wù)器中不會留下系統(tǒng)日志,使得WebShell具有較高的隱蔽性。
惡意文件可以被上傳的原因是多方面的:對上傳的文件類型沒有做出嚴格的檢查,攻擊者巧妙的利用服務(wù)器端對%00后面字符都截斷的特點,將惡意文件重名為x.asp%00x.jpg,從而騙過上傳類型的檢測,將x.asp文件成功上傳至服務(wù)器;使用了含有上傳漏洞的第三方插件;對上傳文件后綴名的白名單(或黑名單)設(shè)置不當,遺漏部分擴展名等。
2.5 跨站腳本攻擊
跨站腳本(XSS)[7]是在Web應(yīng)用程序中發(fā)現(xiàn)的最為普遍的漏洞之一,由于攻擊的對象是Web應(yīng)用的其他用戶,而不是Web應(yīng)用程序本身和其所在的服務(wù)器,往往被系統(tǒng)開發(fā)者和管理員忽視。例如,本文設(shè)計一個收集用戶名參數(shù)的頁面sample.aspx,其主要代碼為:
<%string strUserName = Request["user"];%>
<%=strUserName%>
攻擊者可以構(gòu)造一個惡意的URL:http://域名/sample.aspx? user=。
攻擊者把此惡意URL發(fā)送給想要攻擊的用戶,當被攻擊用戶訪問此URL時,則會出現(xiàn)如圖2所示的結(jié)果。
不難發(fā)現(xiàn),URL的JavaScript語句在被攻擊者的瀏覽器中執(zhí)行了。接下來攻擊者可以利用這個權(quán)限做很多事情,比如盜取用戶Cookie數(shù)據(jù)、修改用戶設(shè)置、竊取用戶賬戶、頁面彈窗釣魚、監(jiān)聽鍵盤事件等。
3 網(wǎng)站信息安全防護對策
3.1 利用字符過濾、存儲過程、參數(shù)化SQL語句等方式避免SQL注入
要做好預(yù)防SQL注入,最有效的方法是在程序中做好用戶提交數(shù)據(jù)的合法性驗證,對用戶輸入的敏感SQL字符(如insert、update、joins、delete、union、group、drop、exec、master、truncate、declare、create、\\、'、load_file、outfile等)進行過濾處理。
此外,可以將所有的SQL語句都存放在存儲過程中,這樣不但可以避免SQL注入,還能提高一些數(shù)據(jù)庫的查詢性能。其缺點是不同的表有不同的查詢條件,需要編寫大量的存儲過程。因此,還可以用參數(shù)化SQL語句,DBMS在執(zhí)行時,先對SQL語句進行編譯,把參數(shù)作為查詢的一部分,而非執(zhí)行的命令,從而可以有效地避免SQL注入。ASP.NET中的一條標準的參數(shù)化SQL語句參考為:
SqlCommand cmd = new SqlCommand(“SELECT * FROM users WHERE name = @userName and pwd = @passWord “);
cmd.Parameters.Add(new SqlParameter("@userName", SqlDbType.VarChar) { Value = NameValue });
cmd.Parameters.Add(new SqlParameter("@passWord", SqlDbType.VarChar) { Value = PasswordValue })。
3.2 對敏感信息進行數(shù)據(jù)脫敏后再存儲
利用明文存儲網(wǎng)站用戶的密碼等敏感信息顯然是不妥的,即便網(wǎng)站沒有被黑客攻擊,也存在由于網(wǎng)站管理員操作不當?shù)葘?dǎo)致信息泄露的風(fēng)險。如果將用戶敏感信息用某種加密算法進行轉(zhuǎn)化處理,使用戶敏感數(shù)據(jù)變成無意義的字符序列,如表1所示,采用MD5對用戶密碼信息進行數(shù)據(jù)脫敏,即使用戶信息被不小心泄露,也能將用戶的損失降至最低。
需要注意的是,即便對用戶敏感信息進行了數(shù)據(jù)脫敏也不能保證信息的絕對安全。如果用戶設(shè)定的密碼過于簡單或者太有規(guī)律,那么攻擊者可以通過試探的方式來暴力破解密碼。因此,在用戶設(shè)定密碼的時候,要引導(dǎo)他們使用不同字符組合、具有一定長度、沒有明顯規(guī)律的強口令密碼。
3.3部署HTTPS網(wǎng)站
為了解決HTTP協(xié)議的安全缺陷,越來越多的站點采用安全套接字層超文本傳輸協(xié)議(HTTPS)部署網(wǎng)站[8]。HTTPS是在HTTP的基礎(chǔ)上加入了安全套接層(SSL協(xié)議)和安全傳輸層(TSL協(xié)議)。SSL協(xié)議主要通過數(shù)據(jù)加密技術(shù)保證通信過程中的安全及數(shù)據(jù)完整性,并依靠CA證書來驗證服務(wù)器的身份。使用HTTPS方式與Web服務(wù)器通信的過程如圖3所示。
HTTPS協(xié)議的特點:(1)需要到CA簽發(fā)機構(gòu)申請購買證書;(2)采用具有安全性的SSL加密傳輸協(xié)議傳送信息;(3)不再使用HTTP的默認80端口,而使用443端口。
部署HTTPS網(wǎng)站不需要修改源程序代碼,只需要從CA簽發(fā)機構(gòu)購買SSL證書安裝、配置在服務(wù)器上即可。按驗證的類別劃分,SSL證書分為域名認證、組織機構(gòu)認證和擴展認證三種。
為了解決HTTP和HTTPS混合內(nèi)容訪問的問題,可以在程序代碼中添加JS腳本程序,用以自動判斷當前請求的URL所使用的協(xié)議,并強制轉(zhuǎn)換成HTTPS請求方式。JS腳本代碼為:
var url = window.location.href;
if (url.indexOf("https")<0){
url = url.replace("http:", "https:")
window.location.replace(url);
}
3.4 對XSS攻擊的防范
預(yù)防XSS攻擊可以在客戶端(瀏覽器)和Web服務(wù)器端進行。在客戶端的防范工作主要是升級瀏覽器,更新漏洞補丁,采用插件對XSS進行檢測并過濾。要做好Web服務(wù)器端XSS攻擊的防范工作,通常需要做好四點。
(1)對所有用戶提交的內(nèi)容進行驗證,這些內(nèi)容包括URL、HTTP頭、POST數(shù)據(jù)等,合理設(shè)定接收數(shù)據(jù)的長度、格式、范圍,采用模式匹配的方法對數(shù)據(jù)進行JavaScript關(guān)鍵字檢索和過濾。
(2)不要在頁面中引用任何不可信的第三方JavaScript代碼。例如,評論、分享、流量統(tǒng)計、文本編輯器等第三方JS插件代碼,都可能被攻擊者利用。
(3)對插入HTML標簽的不可信數(shù)據(jù)進行HTML Entity編碼。例如,對&、<、>、”、‘、/這6個字符進行HTML Entity編碼,分別對應(yīng)轉(zhuǎn)換為&、<、>、"、'、/。
(4)對需要用戶Cookie的Web應(yīng)用,采用HttpOnly屬性的Cookie,防止攻擊者篡改、盜取用戶Cookie信息。
3.5其他必要措施
(1)采用全站靜態(tài)化存儲文檔,不但可以提高網(wǎng)站的響應(yīng)速度,而且還能降低被XSS攻擊的風(fēng)險。
(2)對代碼進行嚴格審計,杜絕文件上傳漏洞。
(3)合理分配服務(wù)器文件的讀寫權(quán)限,禁用文件上傳目錄的運行權(quán)限。
(4)定期做好網(wǎng)站數(shù)據(jù)庫備份,定期檢查網(wǎng)站LOG日志,發(fā)現(xiàn)異常情況及時查找修補漏洞。
(5)自定義錯誤信息頁,將customErrors的mode屬性設(shè)為On或者RemoteOnly,避免暴露程序代碼或數(shù)據(jù)庫表的細節(jié)。
4 結(jié)束語
信息技術(shù)的不斷革新讓網(wǎng)站朝著多元化、專業(yè)化、個性化的方向發(fā)展,也讓網(wǎng)站面臨各種前所未有的挑戰(zhàn)。網(wǎng)站信息安全工作是一項長期性、基礎(chǔ)性、科學(xué)性的系統(tǒng)工程。只要人們加強對網(wǎng)站信息安全工作的重視,在技術(shù)層面和管理層面做一些必要的防范措施,就可以有效地保障網(wǎng)站數(shù)據(jù)的安全。本文對網(wǎng)站信息安全可能存在的各種問題進行了詳細系統(tǒng)的分析,闡述其原理,并針對各種信息安全問題給出了切實可行的防范對策,以期對加強網(wǎng)站信息安全工作起到拋磚引玉的作用。
參考文獻
[1] 中國互聯(lián)網(wǎng)絡(luò)信息中心. 《CNNIC:2020年第45次中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》[EB/OL]. http://www.199it.com/archives/1041487.html.
[2] 劉岳,盛杰,尹成語. Web應(yīng)用中SQL注入攻擊與防御策略研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用, 2017(4):109-111.
[3] 黃嵩.拖庫撞庫對數(shù)據(jù)安全的威脅及應(yīng)對[J].信息與電腦(理論版), 2015(22):131-132.
[4] 姬鳴揚,李林森,李建華. P2P網(wǎng)貸用戶數(shù)據(jù)脫敏技術(shù)研究[J].通信技術(shù), 2017,50(2):321-327.
[5] 王鵬,季明,梅強,等.交換式網(wǎng)絡(luò)下HTTP會話的劫持研究及其對策[J].計算機工程, 2007,33(5):135-137.
[6] 韋鯤鵬,葛志輝,楊波. PHP Web 應(yīng)用程序上傳漏洞的攻防研究[J].信息網(wǎng)絡(luò)安全, 2015(10):53-60.
[7] 左丹丹,王丹,付利華.一種XSS漏洞檢測方法的設(shè)計與實現(xiàn)[J].計算機應(yīng)用與軟件, 2016(07):278-281.
[8] 張寶玉.淺析HTTPS協(xié)議的原理及應(yīng)用[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用, 2016 (7):36-39.
[9] 趙樺箏,黃元浦,等.面向DDoS入侵檢測的報文特征提取方法[J].網(wǎng)絡(luò)空間安全,2020(3):24-29.
[10] 王楊,蔣巍,等.高安全需求的Web服務(wù)器群主動防御體系研究[J].網(wǎng)絡(luò)空間安全,2019(6):1-4.
作者簡介:
陳淑紅(1987-),男,山東日照人,河北工程大學(xué),碩士,山東省日照市莒縣文心高級中學(xué),中學(xué)二級教師;主要研究方向和關(guān)注領(lǐng)域:教育教學(xué)信息化、模式識別。