編者按:Web安全是常見的安全威脅,本文通過介紹幾種常見的Web安全漏洞以及相應的防護技術,來增強人們對Web安全的防范意識和能力。
中國互聯網絡信息中心2020年4月發(fā)布的《第45次中國互聯網絡發(fā)展狀況統計報告》顯示,我國網站數量497萬個,網頁數量2978億個,其中動態(tài)網頁916億個。
Web系統在帶來工作效率提升和生活便利的同時,也帶來了諸多安全隱患。本文介紹幾種常見的Web安全漏洞以及相應的防護技術。
目前多數動態(tài)Web系統,都會向用戶提供可向數據庫查詢的接口。例如,URL中的參數、網站搜索功能以及用戶名密碼登錄功能等。Web系統執(zhí)行這些接口功能,通常會用SQL語句向數據庫請求查詢,以獲取相應的內容。如果Web系統對用戶輸入的內容過濾不嚴格,那么就容易導致SQL注入攻擊。
以用戶名密碼登錄功能為例。用戶點擊“登錄”按鈕后,系統執(zhí)行SQL語句,如果系統對用戶輸入的賬號和密碼沒有嚴格過濾,那么黑客在賬號和密碼框中輸入精心設計的語句,即可繞過用戶名和密碼驗證進行登錄。
防御方法:對用戶提交的參數及數據進行嚴格過濾;對數值型的參數要判斷是否包含字符;對字符型的參數,要對單引號、雙引號及連接符等特殊字符進行過濾。此外,PHP、.net、jsp提供參數化查詢的方式,把用戶輸入的參數作為單純的字符串來處理。
XSS漏洞是由于Web系統對用戶輸入的內容未經有效驗證,然后又將這些內容返回給客戶端造成的。黑客向含有XSS漏洞的Web頁面中插入惡意的script代碼或數據,其他用戶瀏覽該頁面時,這些惡意script代碼或數據就會被執(zhí)行。黑客通過XSS攻擊可以插入惡意鏈接,獲取用戶cookie信息。
以留言板為例,留言板典型的工作模式是將用戶輸入的留言內容顯示出來。假設顯示某一條留言的代碼如下:
防御方法:一是Web系統需要對用戶提交的數據進行過濾,比如過濾單引號、連接符以及單書名號等特殊字符;二是前端處理,在需要輸出的地方使用HTML實體編碼對script標簽等敏感字符進行轉義。
驗證碼在用戶登錄,信息提交等情況下使用較多,目的是防止暴力破解攻擊以及機器人自動攻擊。如果驗證碼機制設置不當,或者驗證碼容易被程序自動識別,那么黑客可以繞過驗證碼發(fā)動暴力破擊攻擊,機器人可以在Web系統中注冊大量用戶以及發(fā)布大量垃圾信息。
常見的驗證碼繞過漏洞有以下幾種情況:一是驗證碼不刷新,在某一時間段或多頁面窗口中驗證碼相同,用戶獲取的驗證碼可以重復使用;二是在Web前端可獲取驗證碼,比如驗證碼信息隱藏在網頁源代碼或cookie信息中,黑客通過代碼分析或cookie分析即可獲取;三是驗證碼易于識別,黑客可使用自動識別軟件等獲取驗證碼信息;四是驗證碼和用戶名密碼不同時提交服務器驗證,可能泄露服務器反饋信息;五是驗證碼數量有限,可輕易構造所有驗證碼。
防御方法:一是驗證碼及時刷新;二是驗證碼信息不存放在網頁源碼中及cookie信息中,從網站后端產生;三是采用不易識別的驗證碼,比如在驗證碼圖片中加入噪聲信息、對驗證碼錯位排列或扭曲變形等;四是驗證碼和用戶名密碼同時提交,且后端需先核驗驗證碼,驗證碼正確后再核驗用戶名密碼;五是增加驗證碼長度,擴展驗證碼組合數量。
多數Web系統都具有上傳功能,比如用戶頭像上傳、發(fā)帖圖片上傳以及文檔存儲上傳等。有些文件上傳的功能代碼沒有對用戶上傳的文件類型或者后綴名進行限定,使得黑客可以利用上傳功能向Web系統上傳任意類型的文件,比如木馬、病毒或惡意腳本等。通過該漏洞,黑客可以誘騙其他用戶下載木馬或病毒,也可以獲取網站權限或者服務器權限,危害非常大。
造成文件上傳漏洞的主要原因有以下幾點。
一是文件上傳時沒有對文件格式進行檢測,或是只在客戶端進行文件類型檢測,這樣容易被黑客繞過檢測機制。比如黑客可以通過NC等工具提交文件,導致任意類型的文件都可以上傳至Web系統。
二是上傳后對文件名處理不當。有些Web系統限定了文件上傳類型,但對上傳后的文件名限定不嚴格,從而可以繞過限定。比如,某系統限定了PHP類型的文件上傳,但是允許上傳doc類型文件。黑客將想要上傳的PHP文件后綴名改為doc類型,上傳成功后,黑客再將該文件的后綴名改為PHP,從而繞過上傳限定。
防御方法:一是采用白名單或黑名單方式,在客戶端和服務器端均對上傳文件的類型進行限定,不允許上傳限定類型以外的其他類型文件;二是禁止修改上傳文件的后綴名,防止通過更改后綴名方式繞過上傳限定機制;三是將存儲上傳文件的目錄設置為只讀,禁止Web容器解析該目錄下的文件,以此限定上傳文件的執(zhí)行。
在Web系統開發(fā)及部署過程中,程序開發(fā)人員及網絡管理人員往往注重系統功能的實現而忽視安全防護。因此,相關人員要增強安全意識,從代碼編寫及服務器配置方面加強Web系統安全性能,杜絕各類安全漏洞。