近年来,JavaScript作为一种独立于平台的语言,已经找到了广泛的用途,从移动应用程序到基于HTML5的游戏以及Node.js服务器。 只使用JavaScript进行特殊效果和表单验证的日子已经一去不复返了。
这种开发对开发人员和消费者都是有利的,无论他们使用什么平台,他们都可以更快地更新其应用程序。
但这也引发了有关安全性的问题。
我们如何确保我们的应用程序按预期运行? 我们如何执行我们的许可证? 那盗版又如何呢?
在本教程中,我们将研究对JavaScript应用程序最常见的威胁,以及如何防范这些威胁。 我们还将研究使Jscrambler 4.0成为开发工作流程的一部分的步骤,以轻松保护JavaScript应用程序的安全。
保护客户端和服务器之间的通信安全
由于JavaScript大部分是在线使用的,因此自然而然的出发点是用户设备上运行的应用程序与服务器之间的连接。
首先,让我解决这个问题: 无论您在客户端上添加了多么好的保护,您始终都需要从假设客户端可能受到损害开始。 有人甚至说您必须将客户端视为恶意软件。
从根本上讲,这样做的原因是,无论您保护客户端的安全程度如何,在请求嗅探工具甚至使用您的客户端的定制客户端的帮助下,JavaScript客户端和服务器之间的HTTP通信总是可以被篡改。服务器的协议。
因此,如果您的应用程序与服务器通信,则在添加任何其他形式的客户端安全性之前,请首先尽可能保护服务器安全-就像使用常规HTML界面时一样。
1.验证您的数据
您可以考虑通过两个概念保护服务器的安全:数据完整性和数据机密性。
数据完整性意味着您的应用程序中的数据在其生命周期中应保持准确且一致。 数据机密性意味着您的用户数据应保持安全,并且第三方永远都不能访问它。
尽管您应该已经在JavaScript客户端中进行了参数验证,但这不会阻止黑客向您的服务器发送格式错误甚至是恶意的数据。 毕竟,有人想破坏您的服务器甚至可能不会使用您的UI!
因此,在使用JavaScript应用程序时,所有常规的服务器端验证(从转义HTML字符到检查属性的类型正确)仍然适用。
有时,发送进来的数据格式正确,但在应用程序状态下却没有意义,例如,当玩家提交的分数过高时。 通过使用健全性检查并将尽可能多的应用程序逻辑放置在服务器上,可以保护服务器免受此类情况的影响。
2.保护您的数据安全
确保客户端-服务器通信安全的另一部分是确保所有特定于用户的数据保持机密性,并且只有授权用户才能访问。
第一步是在JavaScript客户端和服务器之间的所有通信中使用SSL,以防止Internet上的其他人监视两者之间传递的数据。
接下来,您需要验证请求确实来自正确的用户。 如何做到最好的细节取决于您的应用程序。 在基于Web的应用程序中, 随机数是一种有用的技术,而在游戏中,OAuth身份验证可能是一种更自然的方法。
请记住,切勿在客户端中存储敏感信息,例如密码或API密钥。 最好将服务器视为一个API,供JavaScript客户端和Internet上的其他客户端使用。
您无法检查服务器上的所有内容
尽管上面提到的检查适用于每种类型的应用程序,但是当向客户端添加更多复杂性时,某些验证变得很难进行。
例如,在多人游戏中,只要游戏简单且您只有有限数量的玩家,就可以通过服务器运行所有逻辑。 但是随着活跃用户群的增长,服务器上的负载将使您考虑将某些处理移至客户端的可能性。 如果您的游戏逻辑过于复杂以至于无法在服务器上对其进行仿真,则会占用大量资源。
那就是界限变得模糊的地方。
尽管从不信任客户端的想法听起来不错,但实际上,您必须设置一个阈值,说“这就是我对客户端的信任程度”,并且仅在服务器上进行完整性检查。 如果某些玩家的行为也影响了其他玩家,那么您就需要让服务器更多地参与其中,而让用户只能损害他或她自己的体验的地方由客户端来处理。
在没有服务器的情况下,或者在服务器上放置应用程序逻辑没有意义的许多JavaScript用例(例如移动应用程序,HTML5流播放器和地图应用程序)呢?
最后,请记住,无论您的服务器安全性如何,JavaScript客户端始终处于公开状态。 因此,除非您对其添加某种保护,否则攻击者(例如浏览器中的攻击者或数据泄露攻击)很容易获得对敏感数据的访问权或改变用户体验。
保护您JavaScript
作为一种动态语言,可以使用基本工具(例如浏览器的内置调试器)在浏览器中修改JavaScript。 如果您知道自己在做什么,则可以替换部分代码并即时更改应用程序的行为。
如上所述,您应该确保无效数据永远不会进入服务器上的数据库。 但是,有些更改比这更受限制。 恶意软件插件可能会向您的应用程序添加新按钮,以吸引用户访问外部站点。 否则,用户可能会欺骗客户端,以在不玩游戏的情况下观看更多游戏。
这样的更改不会破坏您的整个应用程序,但是会更改用户的体验方式。 对于恶意软件,这也可能严重威胁用户的隐私。
由于JavaScript是一种解释性语言,因此无法完全避免。 一个专职的黑客总是会找到一种方法来克服障碍,就像防盗可以打破任何锁一样。 但是,我们可能会很难破解,以致大多数用户将使用适当的方法(例如擅长于您的游戏)而不是破解应用程序。
这是Jscrambler可以为您提供帮助的地方。
1.使您JavaScript难以破解
Jscrambler是一个JavaScript安全平台,旨在确保以应用程序的开发方式执行JavaScript应用程序。
要尝试Jscrambler, 请访问其主页并注册免费试用版。 如果您发现它符合您的期望,则可以稍后选择其付费计划之一 。
登录后,如果页面顶部显示“现在有新版本的Jscrambler”字样 ,则表示您仍在看到旧版本。 单击立即尝试 。
Jscrambler 4在应用程序中组织您的工作,每个应用程序都可以包含一个或多个JavaScript文件。 因此,接下来,您将看到用于选择要处理的应用程序的屏幕。
如果要使用自己JavaScript应用程序测试功能,请单击创建应用程序 。
现在,让我们选择Playground 。 在这种模式下,您将尝试在示例脚本上进行所有转换,而可以应用于实际应用程序的转换受订阅级别的限制。
在左侧,您将看到“ 文件树” ,应用程序中的文件列表以及用于导入或创建新文件的“ 添加”按钮。 在操场上,添加按钮被禁用。
右边有一个菜单,用于选择您的应用程序的语言规范和应用程序模式 。 Jscrambler使用它们来确保转换后的代码可以在您选择的环境中运行,同时考虑到其局限性和可能性。
现在,我们将使用ES5和基本的Web浏览器应用程序 。
单击文件名( clock.js )以开始处理它。
文件的内容将显示在屏幕中间:左侧的源代码和右侧的Jscrambler转换的版本。
接下来,选择右侧的“代码转换”选项卡以显示可用转换的列表。 Jscrambler允许您选择与代码相关的转换。 您甚至可以在代码中使用注释来更改某些代码的转换方式。 这对于性能至关重要的代码块(例如游戏中的渲染功能)可能非常方便。
要测试转换,请一次选择一个。 然后,单击窗口底部的Protect App ,以创建转换后代码的新版本。
在按钮旁边,您将看到一个仪表,显示这些更改对JavaScript代码的影响。
在仪表中,您将看到三个图标,分别代表您为应用程序选择的转换的成本,弹性和效能(在上面的屏幕快照中从左到右)。
首先,请选中“ 控制流”前面的复选框,然后单击“ 保护应用程序” 。
“ 控制流平化”是Jscrambler 4中添加的功能强大的新转换之一。它可以平化脚本的控制流,从而使阅读代码的人很难遵循应用程序的逻辑。
接下来,继续选择其他一些混淆选项。 随着添加的增加,您会注意到代码变得越来越难以阅读,从而在不破坏其功能的情况下进行编辑。
此外,即使不更改设置而再次单击Protect App时,也会注意到受保护脚本的内容每次都会更改。
Jscrambler的转换是多态的 ,请确保每次转换都产生不同的输出。 这样,即使有人能够破解当前版本,下次您通过Jscrambler运行代码时,这些更改也将不再起作用。
2.使您的应用程序自我保护
到目前为止,我们已经讨论了通过防止用户和外部人员修改您的源代码来确保您的应用程序按预期工作的方法。 但这并不是您需要担心的唯一威胁。
随着JavaScript在独立和移动应用程序中变得越来越流行,盗版也已成为该领域的一个实际问题。
我敢肯定,我们都单击了“查看源代码”,以学习如何做一个很酷的新效果或技巧,并将我们学到的内容改编到我们的网站中。 那不是我在这里所说的。
相反,假设您使用HTML5和JavaScript创建了流行的手机游戏。 得益于JavaScript的可移植性,您可以在Android,iOS和其他平台上使用相同的代码,而无需为每种环境编写本机版本而付出额外的工作即可覆盖更多的受众。 但是有一个问题:任何人都可以复制您JavaScript代码,进行一些修改,然后将其出售!
上一步中的转换通过使代码难以阅读和反向工程来帮助防止这种情况。 除了它们,Jscrambler还添加了代码陷阱,这些功能使代码可以自我保护。
让我们来看看其中的一些。
在Jscrambler的转换列表中,您将找到标题为Code Locks的部分。
本节中的转换为JavaScript应用程序增加了另一层安全性。
使用它们,您可以将代码的执行限制为一组给定的浏览器,一个时间范围(对于在预览期结束后不应运行的演示有用),在给定域(通常是您的域)上以及特定的操作系统。
客户端RASP (运行时应用程序自我保护)是保护代码的一项更强大的功能。 它修改您JavaScript代码,使其免受运行时篡改的影响。 例如,如果有人尝试打开调试器,该应用程序将停止运行。
最后,在“ 优化”部分中,选择“ 缩小”以缩小代码并使文件更小。
然后,单击Protect App ,然后单击Download App以下载源代码并在您的应用程序中使用它。
Jscrambler会跟踪您的转换历史记录,因此您始终可以返回到较早的版本。
3.使用模板使您的工作更轻松
如我们所见,通过逐个选择复选框来配置保护级别非常简单。 但是您仍然可以通过将常见的转换组合分组为模板来加快工作流程。
找到一组要存储以供将来使用的转换后,请单击“ 应用程序设置”部分底部的“ 创建模板 ” 。
Jscrambler将提示您给模板起一个名称和描述。
输入描述性内容,然后点击保存模板 。
您还可以使用“ 模板”选项卡上已经可用的模板之一 :
将鼠标指针移到模板名称上方,以了解有关它们的更多信息并了解它们的含义。 然后单击它们以查看将哪些转换应用于您的代码。
4.使Jscrambler成为开发工作流程的一部分
到目前为止,我们已经介绍了Jscrambler可以使用Web UI帮助您保护应用程序的一些方法。 虽然界面很直观,但是随着您的应用程序的增长,您将需要更简单的方法。
而且,正如我前面提到的,Jscrambler是多态的,每次都会生成不同的输出。 因此,即使不更改特定文件,一次又一次运行该工具也很有用。
为此,让我们看一下Jscrambler的命令行工具。
首先,使用npm下载并安装命令行工具。 在命令行上,输入:
sudo npm install -g jscrambler
安装完成后,请使用Jscrambler管理员返回到您的应用程序。
注意,要使用命令行工具,您将需要使用实际的应用程序而不是操场脚本。 因此,如果您还没有应用程序,请立即创建一个。
选择要应用的转换后,单击页面右上角的下载按钮。 这会将您的设置作为JSON文件下载到您的计算机。
将JSON文件复制到您的项目中。 不要将其提交给版本控制,因为该文件包含您的API密钥和使用Jscrambler API的秘密。
然后,运行jscrambler命令对JavaScript文件执行转换。
例如,如果只有一个文件test.js ,则可以运行以下命令:
$ jscrambler -c jscrambler.json -o test.protected.js test.js
在该命令中,您使用-c参数传入了包含应用程序设置的JSON文件,然后-o test.protected.js了输出文件( -o test.protected.js ),最后-o test.protected.js了要保护JavaScript文件。
要对项目目录中的所有JavaScript文件运行保护,可以使用以下命令:
$ jscrambler -c jscrambler.json -o protected/ **/*.js
在此示例中,您定义一个目录( protected )而不是输出文件,在该目录中Jscrambler将放置保护结果。
现在,您不必在每次更改JavaScript文件时都返回Jscrambler的Web UI。 这将使您更有可能记住该步骤,从而确保您的应用程序安全。
作为进一步的改进,您还可以将Jscrambler任务设置为在脚本发生更改时运行,例如使用Grunt。 甚至可能是连续集成服务器上的一项任务,只要提交新版本的代码,该任务就会运行。
结论
Jscrambler提供了先进的工具,以使破解者,作弊者和恶意软件很难向应用程序注入不需要的功能或更改应用程序的变量。 这也使其他人很难复制您的代码并将其重新分发为自己的代码。
安全是一个复杂的领域,需要考虑多种不同的威胁。 因此,当您JavaScript代码与服务器对话时,最好的解决方案是结合使用服务器开发最佳实践,可靠的参数验证和JavaScript安全平台(例如Jscrambler)来使客户端防篡改。 这样,您可以防止客户端中已经存在针对应用程序完整性的大多数攻击,并确保您的客户获得了为他们设计的体验。
Jscrambler还可以通过检测对DOM所做的更改并为您提供所需的所有信息,来帮助您克服浏览器(MitB)攻击和欺诈,机器人,0天威胁和APT(高级持久威胁)。阻止这些攻击。 有关更多信息,请联系support@jscrambler.com 。
有关Jscrambler,其新功能和最新更新的更多信息,您还可以访问Jscrambler网站 。
翻译自: https://code.tutsplus.com/tutorials/jscrambler-4--cms-26736
本文详细介绍了如何使用Jscrambler 4来保护JavaScript应用程序的完整性和安全性,包括保护客户端和服务器之间的通信、使JavaScript难以破解、实现自我保护,并将其融入开发工作流程。强调了在JavaScript应用中确保数据安全的重要性,提供了具体的操作步骤和建议。

439

被折叠的 条评论
为什么被折叠?



