如何在HTML 5&JavaScript環境下保障開發安全
譯文我們的日常工作已經被各種需要勞心費神的要素所占據,但對每個人來說,其中一大關鍵仍然值得高度關注:如何確保自己的應用程序有能力抵御安全威脅。沒錯,我們必須面對現實,安全考量已經在整個開發流程當中占據了大量時間。在今天的文章中,我希望能夠幫助大家了解安全因素在JavaScript與HTML 5開發環境當中為何如此重要,我們又該如何想辦法以更為便捷的方式實現開發工作中的安全保障。
JavaScript一直保持著旺盛的發展勢頭,而我們也在實踐活動中感受到了這項技術的強大潛能與發展空間。與此同時,Node.js等平臺的發布則讓我們進行了一個全新紀元——在這里,開發流程將變得更加專業、安全且保持著不斷演進。總而言之,大家應當盡可能挑選最適合自己的工作流程,而非長期被固化在習慣思路當中,這也正是JavaScript的核心吸引力之一。
在另一方面,HTML 5則仍然在等待著自身官方標準版本的發布。W3C早在2011年就曾經編寫過一套標準發行版,并告知技術社區預計最終標準版本將于2014年年內正式推出。然而現在2015年都快結束了,我們還在等待著這位習慣性遲到的“標準”先生。
HTML 5中的新特性
- 跨來源資源共享機制
- 內容安全保護策略
- Web存儲 & Web SQL
- 新的輸入與事件標簽/屬性
- Web worker工作線程
- 沙箱iframe
- 地理定位
需要強調的是,安全關注及意義對于這兩款編程語言非常重要,因為它們已經成為目前新手程序員們首選的學習起點(因為擁有豐富的說明材料可供遵循)。而且新人們不應陷入一味追求學習進度的誤區——我的意思是,每個人都應該在學習過程中同時了解安全保障的重要意義,而這也正是編程工作當中的關鍵性基礎因素。
不過也有一部分人樂于看到標準版本的延期發布,而他們的思路也非常明確——盡可能地參與到完整HTML 5標準的制定當中。無論如何,我們的瀏覽器在未來將超越單純的網絡頁面瀏覽或者視頻觀看功能,迎接更為廣泛的發展前景。下面一起來看短期內瀏覽器將具備的各類新功能:
- 執行代碼(在線或者脫機形式)
- 與設備交互(包括攝像頭、麥克風以及GPS等等)
- 播放多媒體及加速3D應用程序
- 開啟TCP連接(面向任意主機)
- 指向本地存儲進行數據讀取與寫入(數據庫及文件)
- 利用多線程實現并行計算
#p#
而這一切都需要借助我們的雙手逐步實現,因此大家應當意識到如果在開發流程當中采取了錯誤的實現方法——特別是在安全方面,那么必然會帶來高昂的修復成本以及大量棘手的難題。在多數情況之下,JavaScript的此類情況甚至更為嚴重,因為我們的代碼內容往往可由任意第三方進行查看。為了解決此類問題,我個人總結出了幾下幾條方案。
學習如何對代碼進行混淆處理
源代碼混淆是一種被廣泛應用的保護機制,旨在限制針對軟件系統的潛在惡意逆向工程或者攻擊活動。這項技術在JavaScript業界當中非常流行,因為JavaScript代碼本身并不存在編譯過程,而且其內容能夠輕松為他人所窺探。那么我們該采取哪些具體手段?
JScrambler是一項JavaScript代碼保護與優化服務。它能夠被用于保護各種類型的基于JavaScript的Web應用程序,具體包括常規HTML/JS應用、移動應用、HTML 5應用、WebGL游戲、瀏覽器插件、功能組件甚至是Windows 8 Metro應用。全部上述應用程序已經越來越多地開始利用JavaScript進行構建,但其所采用的明文傳輸機制也給軟件開發人員帶來了新的安全隱患。
既然大家已經耗費了可觀的時間與精力開發自己的應用程序,那么為什么要讓競爭對手以簡單易行的方式竊取到我們的代碼內容?而未受保護的代碼又可能引發哪些危險后果?下面我們一起來了解:
- 聲譽 — 聲譽往往是吸引用戶選擇我們應用程序的最為重要的隱性資產,而一旦由安全漏洞引發的欺詐等惡意活動襲來,由此帶來的苦果顯然只能由我們自己來承擔。
- 競爭關系 — 如果大家開發出的成果在市場上獨一無二,那么很可能會有競爭對手對代碼內容進行窺探——特別是其具體算法——并借此奪取競爭優勢。這絕對是大家所不想看到的,對吧?
- 商業利益 — 想想我們耗費在開發、維護、重寫以及思考方面的無數時光。未受保護的代碼極易被竊取,這樣我們長久以來的努力將直接被競爭對手所獲取,而可觀的潛在商業利益也將因此被拱手送人。
- 資源投入 — 我們的投資者在面對現有開發成果被他人山寨這類狀況時絕對會欲哭無淚,這種結果既對不起他們的信任與資源投入、更對不起我們自己為開發付出的無數艱辛。因此別忘了引入混淆機制,這樣大家都會更開心!
AuditMark公司是一家專門幫助開發人員及其應用程序免受惡意攻擊、代碼竊取乃至未授權訪問侵擾的服務供應商。JScrambler則是該公司發布的一款產品,專門保護開發人員及程序員對抗第三方入侵者。
除了這款工具的必要性之外,我還想多提幾句其目前的功能定位及其能夠為個體應用開發人員及企業帶來的代碼優化靈活性。下面來看JScrambler的幾項突出優勢:
- 有助于保護知識產權——例如具體算法——JScrambler能夠利用混淆技術遮蔽并保護實際算法,從而立足于JavaScript源代碼之內防止各類惡意窺探行為。
- 保護我們的代碼不至于被直接重復使用或者竊取。盡管惡意人士獲取到的未必是我們的核心算法,但再小的代碼泄露都代表著我們的工作成果遭到了褻瀆。
- JavaScript原始代碼其實極易被挪用(或者說竊取),而在域鎖定以及混淆等技術機制的幫助下,大家將能夠從根本上強化這兩大層面的安全性水平。 大家可以實現域鎖定(即代碼只能在預設的特定域當中執行)并為自己的代碼設定過期日期。
- JScrambler能夠帶來其它安全工具難以比肩的寶貴安全層,如此一來黑客們將需要投入大量時間來找出應用程序當中的安全漏洞。另外JScrambler能夠運行在多種平臺之上——這使其足以成為我們工作流程中的重要組成部分。
毫無疑問,我們應當將更多精力集中在更為嚴肅的安全保障舉措身上,而必要的軟件輔助手段當然也是其中不可或缺的一環。之所以如此推崇JScrambler,是因為它是少數具備多平臺支持能力的安全工具。
#p#
學習如何高效進行代碼調試
根據我的個人經驗,以高效方式調試JavaScript應用程序幾乎是一項不可能完成的任務。不過幸運的是,我們已經擁有大量備選工具來解決這方面難題。Firebug就是其中的佼佼者,而其最大亮點就是包含大量針對DOM、XHR以及Web開發者工具欄的安全機制改進。Chrome瀏覽器目前已經內置這款開發者工具。
- //大家可以利用JavaScript中的catch函數輔助代碼調試工作。
- try {
- // 此處為您的代碼內容
- } catch (e) {
- // Character No
- // Stack Traces
- // Works for cross origin
- }
在現實生活當中,我們最有力的調試工具往往是自己的朋友或者同事。相當大家都有過無數次這樣的經歷,就是有人走到自己面前并直接提出問題,而直到這時我們才意識到原來自己已經被困在了思維習慣的束縛當中。有鑒于此,學會提出正確的問題將成為開發工作得以成功的關鍵所在——而且如果足夠幸運,也許大家的朋友正好在應用程序安全領域頗有心得。
另外大家不妨試試Web Inspector——這是一款出色的調試工具,能夠幫助大家對面向移動設備的代碼成果進行分析。
‘use strict’; //有助于解決錯誤與代碼問題
Strict模式是JavaScript當中的一種可選限制機制,它能夠幫助大家在無需編譯器的情況下以更為安全的方式進行JavaScript編程工作。事實上,致命錯誤在整個開發流程當中隨時可能出現,而strict模式能夠在一定程度上幫我們解決問題。
其設置方式非常簡單,大家只需將其添加到JavaScript文件的起始位置即可:'use strict';
不過需要強調的是,這一模式并不能解決我們可能遇到的全部代碼問題,但其往往能夠立足于瀏覽器為我們提供更多與問題相關的信息,從而幫助大家更清晰地了解問題的出現原因。另外,它確實是在函數當中起效:
- function CodeCondo() {
- 'use strict';
- ....
- }
我建議大家點擊此處訪問Mozilla公司的官方網站,這里提供了更為詳盡的示例以及關于strict模式的解釋(英文原文),大家可以盡量加以利用。
#p#
學習如何更為透徹地理解Web安全
要提升應用安全水平,大家還有另一種較為理想的選項,即更為透徹地理解Web安全及其起效方式。HTML 5與JavaScript都屬于腳本語言,而正因為如此它們很容易受到常見Web攻擊活動的影響,具體包括跨站點腳本攻擊、跨站點請求偽造攻擊以及SQL注入攻擊。
大家應當通過實踐嘗試理解Web安全相關知識,從而讓自己編寫的代碼擁有更為出色的安全保障水平,這同時也有助于大家掌握代碼混淆等相關技術的基本原理與起效方式。大家并不一定需要在一夜之間把自己培養成黑客選手,但盡可能從另一個角度審視開發工作絕對能夠帶來可觀的收益,請相信我。
各類組織機構在網絡安全領域已經取得了相對不錯的發展成果。不過面對已經擁有相當水平的網絡層安全保障,黑客們則開始針對計算堆棧中的更高層級組織薄弱點攻擊活動。
而其中更值得關注的一點在于,目前攻擊者們的行為動機已經發生了重大轉變。他們不再像過去那樣單純為了博取關注并獲得名聲,而是傾向于集中精力獲取各類有價值信息,包括密碼、信用卡信息以及社保號碼,并借此獲取經濟回報。
除此之外,黑客們開始將攻擊活動的重點放在應用層方面,這主要是因為應用程序本身已經成為上述有價值數據的直接及便捷獲取通道。
如何安全地進行開發工作
作為一名開發人員,大家可能會把提升個人技術水平作為第一要務——當然,這確實是個不錯的發展起點。不過大家如果從企業成員的角度出發,也應當考慮到安全問題給業務造成每天數千美元營收損失的可能性,而這類問題的根源往往只是一些愚蠢的錯誤、被忽視的小問題甚至單純由于對安全缺乏足夠的關注。
我個人很偏愛安全開發這類議題,而且我的研究結論與親身經歷也堅定了自己將更多精力集中在這方面工作上的信心。學會如何構建一套面向Web(包括HTML 5與JavaScript)的安全開發環境可能會成為大家未來幾年當中最有價值也最值得高度關注的任務。
也許大家認為像‘use strict’這類簡單的作法不值得自己耗費精力或者時間加以關注。不過在真實世界當中,正是這些小細節成就或者摧毀了規模可觀的整體商業模式——因此請以嚴肅的態度看待這一切。同志們,加油!
原文標題:How to Develop Safely in HTML5 & JavaScript Environment
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】