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