姜家濤
(1.貴州師范大學貴州省信息與計算科學重點實驗室,貴州貴陽 550001;2.貴州師范大學網絡與信息中心,貴州貴陽 550001)
高校信息中心作為信息管理和服務部門,經常遇到師生就業務工作提出各種快速開發應用需求,期待信息部門能夠提供個性化需求,快速開發服務支持。除了采購集成商提供的大型軟件平臺,信息中心必須具有一定研發能力,能夠靈活地開發一些微小的輕應用程序。作為非專業的開發者,高校信息部門程序開發者往往過于關注業務功能而忽略安全隱患,如跨站請求偽造攻擊、開放式重定向攻擊、跨站腳本攻擊和網站頁面篡改等。隨著網絡安全法、數據安全法和個人隱私信息保護法的出臺,Web應用安全成為閉環中最重要一個環節,是保障Web服務和數據安全的必須工作。為了解決Web應用中可能存在的安全問題,文章梳理了開發中各種安全隱患點,深入研究其攻擊方式,并提出相應安全應對策略,然后結合AspnetCore開發平臺實現策略方法,最后分析了某高校網站受到的安全攻擊狀態,并展示應用了提出的安全策略后防護結果。
Web應用保護受限制資源基于訪問控制策略[1-2],其中身份驗證攜帶憑據實現方式主要包括Cookie 身份驗證和令牌身份驗證,身份憑據是安全攻擊主要關注點,不同身份驗證方式可能引發不同安全隱患。
Cookie 身份驗證[3]指當用戶使用用戶名和密碼進行身份驗證時,他們將獲得一個令牌,其中包含一個可用于身份驗證和授權的驗證票證。令牌存儲為Cookie,隨客戶端發出的每個請求一起發送。生成并驗證Cookie是否有Cookie身份驗證中間件執行,中間件將用戶主體序列化為加密的Cookie。后續請求中,中間件將驗證Cookie,重新創建主體并將該主體分配填充到User屬性。
令牌身份驗證[4]常用作App 和H5 客戶端身份驗證。當用戶通過身份驗證時,他們將獲得一個令牌。令牌包含聲明形式的用戶信息,或是將應用指向應用維護自我狀態的引用令牌。當用戶嘗試訪問需要身份驗證的資源時,令牌將以持有者令牌的形式通過額外的授權標頭發送給應用服務器。基于令牌身份驗證是應用無狀態的,后續的每個請求都必須攜帶令牌以進行服務器驗證。其次,令牌是未加密的,已編碼的。在服務器身份驗證時,須對令牌進行解碼以訪問其信息,并刷新過期日期。若在后續請求中持續需要令牌,只需將令牌存儲在瀏覽器的本地存儲中即可。值得注意的是,令牌的存儲方式的選擇也可能引起“跨網站請求偽造”安全隱患。
跨網站請求(CSRF)[5-6]是一種針對Web 托管應用的工具,惡意Web應用憑此也可以影響客戶端瀏覽器與信任該瀏覽器的Web 應用之間的交互。Web 瀏覽器會隨著對網站的每個請求自動發送某些類型的身份驗證令牌,利用用戶以前經過身份驗證的會話展開攻擊。
開放式重定向攻擊發生場景為:當用戶訪問需要身份驗證的資源時,Web應用程序會將用戶重定向到登錄頁面。重定向通常包含一個returnUrl 和querystring參數,以便用戶在登錄后可以返回到最初請求的地址。當用戶驗證身份通過后,網頁將被重新定向到請求的地址URL。由于目標URL是在請求querystring中指定的,因此惡意用戶可能會篡改querystring。篡改querystring 中URL 參數可以將用戶重定向到外部的惡意站點,可能是境外賭博和黃色網站,甚至是釣魚網站,給用戶帶來巨大損失,給高校造成負面影響。
跨站腳本(XSS)[7]是一種安全漏洞,攻擊者利用此漏洞將客戶端腳本置于網頁中。當其他用戶加載受影響的頁面時,攻擊者的腳本便會運行,從而可盜取cookie和會話令牌、通過DOM操作更改網頁內容或將瀏覽器重定向到其他網頁。XSS 漏洞常發生在應用程序接受用戶輸入并將它輸出到網頁而不進行驗證、編碼或轉義的情況。
網頁非法篡改是黑客攻入系統,對網站頁面內容進行篡改。通常會植入后門、網頁掛馬、注入黑鏈暗鏈等,甚至于惡意宣揚政治意識形態和宗教信仰信息,這對于高校、事業單位影響尤其惡劣。
網頁非法篡改主要有以下形式[8]:
1)Web Shell 攻擊:通過上傳木馬、植入后門文件等方式獲取服務器權限,上傳修改篡改網頁。
2) SQL 注入:利用SQL 語句漏洞篡改數據庫,對動態網頁數據非法修改。
3) 利用軟件或操作系統漏洞:通過漏洞獲得權限,達到上傳篡改網頁目標。
針對以上Web應用存在的安全攻擊隱患,文章設計了啟用HTTPS、Web 訪問控制(驗證授權機制)、防跨站請求偽造攻擊、防跨站腳本攻擊、防開放式重定向攻擊和防網頁非法篡改策略,并基于AspnetCore Web 應用開發平臺實現,保證Web 應用的基本安全。圖1為Web 應用開發安全防護架構。

圖1 Web應用開發的安全防護架構
為了保護敏感數據在網絡傳輸中的傳輸安全,Web 系統必須啟用安全超文本傳輸協議(Hypertext Transfer Protocol over SSL,HTTPS)[9],即經過SSL 加密后的HTTP。HTTPS 使用SSL 在發送方將原始數據進行加密,然后在接收方進行解密,加密和解密需要發送方和接收方通過交換共享密碼實現,數據很難被截獲和解密。HTTPS 是Internet 通信安全協議,可以保證網絡通信的Client/Server 之間防竊聽、防消息篡改及消息偽造的安全通信。
Web 開發中AspnetCore 平臺使用HTTPS 非常簡單:在Startup 類中配置UseHttpsRediction 中間件將HTTP請求重定向到HTTPS,配置網絡端口443。
阻止跨站點請求偽造可以從用戶與Web 應用軟件兩個方面著手。用戶可以采用以下預防措施來防范:用完Web 應用程序后習慣退出登錄,定期清理瀏覽器cookie。但從根本上解決CSRF 漏洞要從Web 應用開發著手,將數據保護實現防偽造。
如前所述,跨站腳本攻擊通常是客戶端網頁展示了不受信任的數據,簡單地嵌入在HTML元素、HTML屬性和JavaScript 中,直接地接收URL 請求傳來的數據。為了阻止跨站腳本(XSS)攻擊,在開發中應該進行以下工作預防避免引入XSS:
1)切勿將不受信任的數據置于HTML輸入中,除非按照后續其他方法進行處理。不受信任的數據是指可能由攻擊者控制的任何數據、HTML窗體輸入、查詢字符串、HTTP 標頭,甚至是源自數據庫的數據,因為即使攻擊者無法破壞應用程序,也可能破壞數據庫。
2)將不受信任的數據置于HTML元素中之前,確保其經過HTML編碼。
3)將不受信任的數據置于HTML屬性中之前,確保其經過HTML編碼。
4) 將不受信任的數據置于JavaScript 中之前,將數據置于運行時檢索其內容的HTML元素中。
5)將不受信任的數據置于URL 查詢字符串中之前,確保其經過URL編碼。
由于開放式重定向功能由URL 攜帶不安全數據造成,在開發過程中丟棄這部分數據,將所有用戶提供的數據視為不可信、不再利用。如果程序的確需要基于URL內容重定向用戶頁面,也必須確保重定向的頁面是本地頁面。
表1為作者所在高校基于日志過濾器得到的部分歷史網絡攻擊記錄,反映了高校Web對外窗口受到安全攻擊是常態化狀況。攻擊類型很多,其中SQL注入和跨站腳本攻擊占據大部分。攻擊來源廣,既有國內惡意攻擊,也有來自海外IP的滲透。通過在Web開發中一一實現上述相關安全策略,做好入侵防護,可以有效攔截滲透攻擊,保證Web應用安全。

表1 某高校Web系統網絡入侵攻擊記錄表
高校信息系統開發過程中面臨跨站請求偽造攻擊、開放式重定向攻擊、跨站腳本攻擊和網站頁面篡改等安全隱患,系統開發者不可忽視。本文梳理了Web開發過程中可能存在的安全隱患點,分析了Web攻擊特點、攻擊手段,并針對每種可能的攻擊方式,制定了相應的安全應對策略。最后結合AspnetCore 開發平臺對提出的方法策略進行實踐,并在作者所在高校的網站中應用測試,有效地堵住以上系統安全漏洞,展示了較好的效果,從開發角度保證了Web 系統的安全。當然,Web 系統的攻擊方式形形色色,無孔不入,我們不僅要堵住攻擊,還要考慮預防,后期將考慮利用AI手段預測預警。