如何在HTML 5&JavaScript环境下保障开发安全

译文
开发 后端 前端
在今天的文章中,我希望能够帮助大家了解安全因素在JavaScript与HTML 5开发环境当中为何如此重要,我们又该如何想办法以更为便捷的方式实现开发工作中的安全保障。

我们的日常工作已经被各种需要劳心费神的要素所占据,但对每个人来说,其中一大关键仍然值得高度关注:如何确保自己的应用程序有能力抵御安全威胁。没错,我们必须面对现实,安全考量已经在整个开发流程当中占据了大量时间。在今天的文章中,我希望能够帮助大家了解安全因素在JavaScript与HTML 5开发环境当中为何如此重要,我们又该如何想办法以更为便捷的方式实现开发工作中的安全保障。

JavaScript一直保持着旺盛的发展势头,而我们也在实践活动中感受到了这项技术的强大潜能与发展空间。与此同时,Node.js等平台的发布则让我们进行了一个全新纪元——在这里,开发流程将变得更加专业、安全且保持着不断演进。总而言之,大家应当尽可能挑选最适合自己的工作流程,而非长期被固化在习惯思路当中,这也正是JavaScript的核心吸引力之一。

 

如何在HTML 5&Java环境下保障开发安全

在另一方面,HTML 5则仍然在等待着自身官方标准版本的发布。W3C早在2011年就曾经编写过一套标准发行版,并告知技术社区预计最终标准版本将于2014年年内正式推出。然而现在2015年都快结束了,我们还在等待着这位习惯性迟到的“标准”先生。

HTML 5中的新特性

  • 跨来源资源共享机制
  • 内容安全保护策略
  •  Web存储 & Web SQL
  • 新的输入与事件标签/属性
  • Web worker工作线程
  • 沙箱iframe
  • 地理定位

需要强调的是,安全关注及意义对于这两款编程语言非常重要,因为它们已经成为目前新手程序员们首选的学习起点(因为拥有丰富的说明材料可供遵循)。而且新人们不应陷入一味追求学习进度的误区——我的意思是,每个人都应该在学习过程中同时了解安全保障的重要意义,而这也正是编程工作当中的关键性基础因素。

如何在HTML 5&Java环境下保障开发安全

不过也有一部分人乐于看到标准版本的延期发布,而他们的思路也非常明确——尽可能地参与到完整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浏览器目前已经内置这款开发者工具。

  1. //大家可以利用JavaScript中的catch函数辅助代码调试工作。 
  2.  
  3. try { 
  4.  
  5.  // 此处为您的代码内容 
  6.  
  7. catch (e) { 
  8.  
  9.  // Character No 
  10.  
  11.  // Stack Traces 
  12.  
  13.  // Works for cross origin 
  14.  

在现实生活当中,我们最有力的调试工具往往是自己的朋友或者同事。相当大家都有过无数次这样的经历,就是有人走到自己面前并直接提出问题,而直到这时我们才意识到原来自己已经被困在了思维习惯的束缚当中。有鉴于此,学会提出正确的问题将成为开发工作得以成功的关键所在——而且如果足够幸运,也许大家的朋友正好在应用程序安全领域颇有心得。

另外大家不妨试试Web Inspector——这是一款出色的调试工具,能够帮助大家对面向移动设备的代码成果进行分析。

‘use strict’; //有助于解决错误与代码问题

Strict模式是JavaScript当中的一种可选限制机制,它能够帮助大家在无需编译器的情况下以更为安全的方式进行JavaScript编程工作。事实上,致命错误在整个开发流程当中随时可能出现,而strict模式能够在一定程度上帮我们解决问题。

其设置方式非常简单,大家只需将其添加到JavaScript文件的起始位置即可:'use strict';

不过需要强调的是,这一模式并不能解决我们可能遇到的全部代码问题,但其往往能够立足于浏览器为我们提供更多与问题相关的信息,从而帮助大家更清晰地了解问题的出现原因。另外,它确实是在函数当中起效:

  1. function CodeCondo() { 
  2.  
  3.       'use strict'
  4.  
  5.           .... 
  6.  

我建议大家点击此处访问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】

责任编辑:王雪燕 来源: 51CTO
相关推荐

2012-07-25 11:07:06

2021-12-01 15:52:56

安全开发测试

2022-03-22 22:49:57

大数据信息安全安全

2020-12-23 09:10:32

物联网智能家居

2015-03-27 17:53:59

云存储云存储安全

2019-04-24 13:31:22

2013-06-27 14:33:00

2015-05-12 10:03:55

OpenStack环境容器编排Docker

2009-07-17 14:26:40

在Linux下配置Jy

2015-08-17 11:20:40

开源工具

2014-03-19 09:19:44

KDE应用GNOME

2021-12-03 07:27:29

EFCore生产环境

2012-11-28 17:58:37

云服务网路安全网络架构

2010-06-04 14:12:57

Hadoop开发环境

2023-01-09 10:19:38

2022-09-08 15:36:07

物联网安全物联网网络

2011-07-27 17:21:34

安全模式光驱

2010-09-26 09:57:41

2013-05-22 09:59:10

HTML 5音频

2013-11-12 09:56:03

系统服务安全TCP wrapper企业安全
点赞
收藏

51CTO技术栈公众号