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