張 坤,呂義正
(黃山學院 信息工程學院,安徽 黃山245041)
當前隨著各瀏覽器對HTML5 支持程度的不斷增加,HTML5 正在逐步被各大主流網(wǎng)站所接受,HTML5 的相應(yīng)新特性也逐步被使用在一些最新的網(wǎng)站當中,這其中就包含了本文所要探討的內(nèi)容—Web 客戶端存儲。HTML5 標準定義了可以在瀏覽器端使用Javascript 腳本存取數(shù)據(jù)的客戶端存儲及客戶端數(shù)據(jù)庫,隨著HTML5 標準的逐步確立,該技術(shù)的使用場景也越來越廣泛。
客戶端數(shù)據(jù)存儲在網(wǎng)頁初始階段就已經(jīng)存在,以Coolies,F(xiàn)lash 和Google Gears 客戶端數(shù)據(jù)庫作為主要的存儲方式,但是這幾項又都有各自的不足之處,比如Cookies 和Flash 支持的數(shù)據(jù)量太小,F(xiàn)lash 和Google Gears 需要安裝插件等等,給數(shù)據(jù)的分布式存放造成了很大的困擾[1]。
現(xiàn)如今隨著HTML5 標準的逐漸明確,其客戶端存儲技術(shù)出現(xiàn)了Web Storage, File System,IndexedDB 和Web SQL 4 大分類[2],而由于大瀏覽器廠商技術(shù)方向的不同也造成了以上存儲方式被各瀏覽器的支持程度不盡相同。但是無論是哪種存儲方式,都已經(jīng)大大增加了客戶端可存儲數(shù)據(jù)的容量。表1為各瀏覽器對此4 類文件的支持情況列表。
客戶端存儲的快速發(fā)展也帶來了一系列關(guān)于數(shù)據(jù)安全性上的疑問,誠然新的客戶端存儲技術(shù)給了程序設(shè)計人員更多的數(shù)據(jù)存放的方法與手段,但由于所有數(shù)據(jù)存放于客戶端,并不能完全被服務(wù)器端掌控,并且在客戶端可以被腳本存取,很有可能存在數(shù)據(jù)丟失、泄露等問題,增加了數(shù)據(jù)的風險性。
如今新標準允許將大量的數(shù)據(jù)存放于客戶端,在搜索上可以大大縮減服務(wù)端的壓力,同時甚至可以完成數(shù)據(jù)的離線瀏覽和計算。但技術(shù)帶來便利的同時也帶來了數(shù)據(jù)的風險性。在對幾大主流網(wǎng)站進行的正常使用分析測試的過程中發(fā)現(xiàn),基本上所有的主流網(wǎng)站都已經(jīng)開始使用Web Storage來存放某些特定的數(shù)據(jù),部分網(wǎng)站甚至已經(jīng)開始使用IndexedDB 作為本地數(shù)據(jù)庫。而在離線存儲部分,大量的閱讀性網(wǎng)站開始使用File System 技術(shù)作為手機端的本地數(shù)據(jù)存放手段。
表1 本地存儲技術(shù)瀏覽器支持情況列表
由于前端數(shù)據(jù)尤其是離線數(shù)據(jù)可能因為很多的原因出現(xiàn)被更改甚至丟失的情況,因此在程序的設(shè)計過程中始終要牢記的一點就是保存在前端緩存中的數(shù)據(jù)是不可信的。不能夠根據(jù)其中的不可信數(shù)據(jù)做重要的決策,并且將其不經(jīng)驗證直接保存在數(shù)據(jù)庫之中[3]。
對于一個小說網(wǎng)站來說,由于小說數(shù)據(jù)不存在敏感性問題,站點可以一次性將小說的幾個章節(jié)甚至整本小說存放在客戶端而無需擔心數(shù)據(jù)泄露,這樣可以很好的提高用戶在網(wǎng)站瀏覽時的流暢度,并且減少客戶發(fā)送請求的次數(shù)從而降低服務(wù)器端的壓力。
正確的使用可以給網(wǎng)站帶來很好的閱讀體驗,但是危險往往出現(xiàn)在對新興技術(shù)的濫用上。在早期客戶端存儲的使用過程中就曾經(jīng)出現(xiàn)過,客戶的郵箱信息,個人信息甚至銀行卡信息被隨意的存放在前端的情況,從而導致數(shù)據(jù)的泄露以致經(jīng)濟上的損失[4]。因此在選擇存放內(nèi)容的時候一定要慎重。這里的存放建議是,不要把數(shù)據(jù)庫中都不是明文存放的數(shù)據(jù)放在前端,是明文存放的內(nèi)容一定也要選擇其中敏感度較低的內(nèi)容,必要時采取相應(yīng)的加密技術(shù)。
有些時候為達到某種效果或要求,系統(tǒng)不得不在前臺存放一些敏感數(shù)據(jù),很顯然這種情況下數(shù)據(jù)和系統(tǒng)的風險性就會變得很大,為了規(guī)避這種情況下的數(shù)據(jù)風險,可以在系統(tǒng)中做如下的配置。
1.使用Https 協(xié)議。以用于測試的Http 網(wǎng)站為例,當使用Imposter 工具模擬了DNS 欺騙性攻擊時,攻擊成功并可以由此獲得了客戶端存放的信息內(nèi)容;然而由于在https 協(xié)議下存放的客戶端數(shù)據(jù)是不可以被http 的訪問所讀取的,這樣的配置可以在很大程度上防御此類型攻擊。
2.使用具有唯一性的數(shù)據(jù)ID 或數(shù)據(jù)庫名稱。黑客在獲取信息性時常會使用一些試探性的攻擊方式,如果在客戶端存儲數(shù)據(jù)時使用常用的或者固定的id 或數(shù)據(jù)庫名稱,在遭受到跨域攻擊(XSS)時,往往可能會導致數(shù)據(jù)被腳本截獲,導致數(shù)據(jù)的泄露。同時如果系統(tǒng)使用一些隨機名稱的話,當用戶使用離線數(shù)據(jù)的時候,又會給系統(tǒng)獲取數(shù)據(jù)信息帶來很大的麻煩[5]。所以如果網(wǎng)站不使用離線數(shù)據(jù)的話,可以直接使用隨機名稱,并且把名稱存放在服務(wù)器端,如果網(wǎng)站需要使用離線數(shù)據(jù)的情況下,站點可以在啟用離線數(shù)據(jù)的同時要求用戶提供一個離線密碼,id或數(shù)據(jù)庫名稱就可以使用用戶名+離線密碼的形式,這樣的方式可以有效提高黑客攻擊的難度。
3.敏感數(shù)據(jù)的加密。對于某些無需在前臺讀取,但需要保存在前臺以備后臺調(diào)用的數(shù)據(jù),可以后臺生成數(shù)據(jù)時直接進行加密處理,避免出現(xiàn)明文直接存放的情況。
通常如果需要在客戶端存放大量數(shù)據(jù),尤其是其中包含敏感數(shù)據(jù)的時候,客戶需要有相應(yīng)的知情權(quán)和選擇權(quán),因此設(shè)計上需要在網(wǎng)站上有所提示并提供相應(yīng)選擇,并且通常這樣的授權(quán)都是針對于某一客戶端的。例如人們通常在安全網(wǎng)絡(luò)環(huán)境(家里)使用個人網(wǎng)站時通常會允許更高的權(quán)限,但是在辦公室又會為了保護隱私而放棄該功能,因此需要有一種方式來鑒別不同的客戶端。
如果僅僅在客戶端保存相應(yīng)的許可信息的話,很有可能被黑客復(fù)制并利用,導致數(shù)據(jù)的泄露,所以需要的鑒別方式應(yīng)該能夠有效的防止這一可能性。因此建議在數(shù)據(jù)中存放MD5 加密過的最近一次的用戶Session ID,并將此信息同步保存在服務(wù)器端,當用戶登錄時,可以通過信息的比對確認該用戶是否存在。數(shù)據(jù)只有在用戶同意存放之后才會被保存在客戶端,否則需要通過其他方式來達到同一效果[6]。
由于數(shù)據(jù)信息保存在客戶端,因此很有可能遭受XSS 攻擊而被篡改。往常為了防范此類攻擊,網(wǎng)站會在數(shù)據(jù)存放前在客戶端對數(shù)據(jù)進行編碼操作以避免可執(zhí)行代碼的運行,然而如果將傳統(tǒng)的客戶端存儲轉(zhuǎn)為使用HTML5 客戶端存儲,所有信息可以被前臺腳本讀寫的情況下,前臺數(shù)據(jù)很有可能被黑客攻擊并篡改,導致數(shù)據(jù)庫中信息直接被保存為XSS 惡意腳本[7]。因此在HTML5 時代除了對存放數(shù)據(jù)需要進行編碼操作外,在讀取信息的同時也需要進行編碼操作以避免惡意腳本的攻擊。
目前來說支持前端SQL 的只有Web SQL,但由于SQL 語言本身并沒有一個固定的標準,所以此項功能已經(jīng)被制定HTML5 標準的W3C 團隊所否定,雖然有一些瀏覽器已經(jīng)對Web SQL 進行支持,但是為了產(chǎn)品的跨平臺使用能力,一般不建議使用前端SQL 的功能,當然也就能夠避免由客戶端數(shù)據(jù)庫帶來的SQL 注入風險。
隨著各不同平臺瀏覽器的支持,HTML5 的技術(shù)標準正在逐漸走向成熟,使用該技術(shù)網(wǎng)站的不斷增加,其暴露的風險也將越來越多,目前國內(nèi)網(wǎng)站在使用HTML5 存儲技術(shù)的時候主要關(guān)注的是功能和性能,并且存在新功能的濫用現(xiàn)象,在安全性上并沒有做很大的修正,以至于不少網(wǎng)站存在數(shù)據(jù)風險,尤其是在應(yīng)對跨域攻擊這方面的設(shè)定相對薄弱。不少站點還在致力于保護服務(wù)器端的安全,卻往往忽略的了前端數(shù)據(jù)帶來的風險,可以預(yù)見不久的將來,隨著各種客戶端存儲的使用,網(wǎng)站暴露的風險也會越來越多,對于HTML5 的安全性研究也會隨之逐步深入。
[1]Stuttard D,Pinto M. The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws [M].2nd ed.Wiley,2012:20-23.
[2]Lubbers P,Smith R,Sali F.HTML5 高級程序設(shè)計[M].北京:人民郵電出版社,2011:77-78.
[3]Hannax S,Shinz E C R,Akhawe D,et al. The Emperor’s New API:On the ( In) Secure Usage of New Client Side Primitives [M]. IEEE Web 2.0 Security and Privacy Workshop,2010:23-25.
[4]Schmidt M,Rthlisberger T.HTML5 web,security [EB/OL].http://media.hacking-lab.com/hlnews/HTML5_Web_Security_v1.0.pdf,Compass Security AG, December 6th,2011-05-08.
[5]McArdle R. HTML5 OVERVIEW: A LOOK AT HTML5 ATTACK SCENARIOS [EB/OL].
http://www.trendmicro.com/cloud-content/us/pdfs/security-intelligence/reports/rpt_html5-attack-scenarios.pdf, Trend Micro Research Paper, 2011-04-10.
[6]Kuppan L. Attacking with HTML5[EB/OL].https://media.blackhat.com/bh-ad-10/Kuppan/Blackhat-AD-2010-Kuppan-Attacking -with -HTML5 -slides.pdf, Blackhat -AD,2010-06-02.
[7]董霽,楊丁寧,史德年.基于HTML5 技術(shù)的移動智能終端應(yīng)用及安全問題研究[J].現(xiàn)代電信科技,2012,(12):1-7.