如何保护 JavaScript 文件?

2023-11-25

我知道隐藏源代码是不可能的,但是,例如,如果我必须将 JavaScript 文件从 CDN 链接到网页,并且我不希望人们知道该脚本的位置和/或内容,是这样吗?可能的?

例如,要链接网站上的脚本,我们使用:

<script type="text/javascript" src="http://somedomain.example/scriptxyz.js">
</script>

现在,是否可以向用户隐藏脚本的来源,或者隐藏脚本内容并仍然在网页上使用它?

例如,将其保存在需要密码才能访问文件的私人 CDN 中,这可行吗?如果没有,怎样才能得到我想要的东西?


好问题,简单回答:你不能!

JavaScript 是一种客户端编程语言,因此它在客户端计算机上运行,​​因此您实际上无法向客户端隐藏任何内容。 混淆代码是一个很好的解决方案,但这还不够,因为尽管这很困难,但有人可以破译您的代码并“窃取”您的脚本。 有几种方法可以使您的代码难以被窃取,但正如我所说,没有什么是万无一失的。

我突然想到,一个想法是限制从嵌入代码的页面外部访问外部 js 文件。在这种情况下,如果您有

<script type="text/javascript" src="myJs.js"></script>

并且有人尝试访问myJs.js如果他在浏览器中打开文件,则不应授予他对脚本源的任何访问权限。 例如,如果您的页面是用 PHP 编写的,您可以通过以下方式包含该脚本include函数并让脚本决定是否safe" 返回它的来源。 在此示例中,您将需要外部“js”(用 PHP 编写)文件myJs.php:

<?php
    $URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    if ($URL != "my-domain.example/my-page.php")
    die("/\*sry, no acces rights\*/");
?>
// your obfuscated script goes here

这将包含在您的主页中my-page.php:

<script type="text/javascript">
    <?php include "myJs.php"; ?>;
</script>

这样,只有浏览器才能看到js文件内容。

另一个有趣的想法是,在脚本末尾,删除 dom 脚本元素的内容,以便在浏览器评估您的代码后,代码消失:

<script id="erasable" type="text/javascript">
    //your code goes here
    document.getElementById('erasable').innerHTML = "";
</script>

这些都只是简单的黑客行为,不能,我不能足够强调这一点:不能,完全保护你的 js 代码,但它们肯定会激怒那些试图“窃取”你的代码的人。

Update:

我最近遇到一篇非常有趣的文章写于帕特里克·魏德关于如何隐藏你的 js 代码,他揭示了一种不同的方法:你可以将源代码编码到图像中!当然,这也不是防弹的,但这是另一个fence您可以围绕您的代码进行构建。 这种方法背后的想法是,大多数浏览器可以使用 canvas 元素对图像进行像素操作。由于画布像素由 4 个值(rgba)表示,因此每个像素可以具有 0-255 范围内的值。这意味着您可以在每个像素中存储一个字符(实际上是 ascii 代码)。其余的编码/解码是微不足道的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保护 JavaScript 文件? 的相关文章

  • javascript/jquery 从选择中删除或删除选项

    在某些情况下 我需要从选择中删除选项 基本上 if mystatement true remove item with id option1 from select of id select1 有人知道我可以实现这一目标的代码吗 非常感谢
  • 如何恢复文本框数据

    我有一个小小的要求 我们已经恢复了之前清除的文本框数据 下面是我的 HTML 代码 table tr td td tr table
  • 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

    我有一个用普通 JavaScript 编写的 Web 应用程序 我想用 jQuery 动画来增强它 并使用我在各种 jQuery 插件中找到的一些功能 例如上传 http www uploadify com 可以通过什么方式将 jQuery
  • 如何使用多个 select2 框过滤表格?

    我正在尝试使用 和多个 select2 框的类来过滤表格 表格 HTML table class table tbody tr class kanban event Austin td td tr tr class csm event Ch
  • 在有限的上下文中运行 JS 代码

    我正在尝试奔跑trusted 隔离 上下文中的 JS 代码 基本上想出了这个方法 function limitedEval src context return function with this return eval src call
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • JavaScript 字符串中的脚本标签[重复]

    这个问题在这里已经有答案了 我遇到一个问题 即 JavaScript 中带引号的字符串内有结束脚本标记 并且它正在杀死脚本 我认为这不是预期的行为 可以在这里看到这样的示例 http jsbin com oqepe edit http js
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • jquery 中的函数返回未定义[重复]

    这个问题在这里已经有答案了 我在 jquery 中调用的函数返回未定义 我检查了该函数 当我对其进行调试时 它返回正确的数据 function addToPlaylist component type add to pl value pl
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • Angular JS - 使服务可以从控制器和视图全局访问

    假设我们有以下服务 myApp factory FooService function 然后 从控制器中 我会说 myApp controller FooCtrl scope FooService function scope FooSer
  • Svelte 条件元素类报告为语法错误

    我正在做一个if块每if 块的精简指南 https svelte technology guide if blocks 这看起来很简单 但 Svelte 认为这是一个语法错误 svelte plugin ParseError Unexpec
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • 轮播滑动(未滑动)事件上的火灾事件,Bootstrap 3

    Bootstrap 2 似乎可以很好地处理幻灯片事件 请参阅这个问题 https stackoverflow com questions 9651466 how to attach slide slid events to the boot
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询

随机推荐

  • 清除 R / RStudio 中的启动屏幕

    我想更改我第一次打开 R 或实际 Rstudio 时看到的启动 登录屏幕 我想要的只是 gt 提示 仅此而已 我知道我以前在网上见过这个 但不记得搜索短语是什么 我应该补充说我正在使用乌班图Linux 有什么建议么 其他人给你建议如何停止这
  • 将选项值设置为选定的

    我想加载一个选择框 其中用户选择的值将自动出现 我正在从服务器接收带有用户信息的 Json 数据 数据样本是 color red 在我的 html 代码中 我有这样的选择选项
  • Sencha Touch MVC——通过控制器传递数据的推荐方式?

    我正在使用 Sencha Touch 作为移动应用程序 并使用其中的 MVC 功能 我非常喜欢 Sencha 但在使用控制器将数据从一个 屏幕 传递到下一个 屏幕 时遇到了一些麻烦 有一个与许多 Sencha 小部件关联的 记录 属性 例如
  • UnicodeDecodeError:“charmap”编解码器无法解码位置 XXX 中的字节 0x8f:char

    我正在尝试从 python 脚本读取一个日志文件 我的程序在 Linux 中运行良好 但在 Windows 中遇到错误 在读取特定行号的某些行后 我收到以下错误 File C Python lib encodings cp1252 py l
  • 如何在Xamarin中查找当前的UIViewController

    我正在使用Facebook 身份验证 SDK 使用 Xamarin Forms C example 然而 Facebook SDK 已经弃用了该方法 并将其替换为添加了fromViewController变量到构造函数中 我对 Xamari
  • Fluent Wait 和 WebDriver Wait - 差异

    我都看过FluentWait and WebDriverWait在使用 Selenium 的代码中 FluentWait使用轮询技术 即它将在每个固定间隔轮询特定的WebElement 我想知道有什么作用WebDriverWait做与Exp
  • python websocket 握手(RFC 6455)

    我正在尝试使用 RFC 6455 协议在 python 上实现一个简单的 websocket 服务器 我采用了握手格式here and here 我使用 Chromium 17 和 Firefox 11 作为客户端 并收到此错误 Uncau
  • Android AdMob - 请求欧洲用户同意

    我实施了欧盟用户同意政策 with Android AdMob根据本文 问题 UserMessagingPlatform总是失败onConsentInfoUpdateFailure在真实设备 带有 HashedId 或模拟器上 错误 服务器
  • Flask-SQLalchemy 更新一行信息

    如何更新行的信息 例如 我想更改 id 为 5 的行的名称列 使用检索对象Flask SQLAlchemy 文档中显示的教程 获得要更改的实体后 请更改实体本身 然后 db session commit 例如 admin User quer
  • 如何从 SQL Server 发送电子邮件?

    如何使用 T SQL 发送电子邮件 但电子邮件地址存储在表中 我想遍历表格并能够发送电子邮件 到目前为止 我找不到这样做的好例子 步骤 1 创建个人资料和帐户 您需要使用配置数据库邮件向导创建配置文件和帐户 可以从管理节点中数据库邮件节点的
  • ADB 在 Eclipse 中崩溃

    这个问题涉及到这个线程 但是该线程没有答案 因此从技术上讲这不是重复的 我已经在 Windows 7 x64 和 Eclipse SDK 3 6 2 上运行 ADB 1 0 26 并使用 ADT 10 0 1 SDK 工具 r10 并且已经
  • 如何在 Kotlin 中基于/比较多个值进行排序?

    说我有一个class Foo val a String val b Int val c Date 我想对列表进行排序Foos 基于所有三个属性 我该怎么办呢 Kotlin 的 stdlib 为此提供了许多有用的辅助方法 首先 您可以使用以下
  • 将 .html 文件转换为图像 [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在寻找任何能够忠实地将 html 文件转换为图像格式的实用程序 最好是 png 或 jpeg 我在谷歌上搜索了几个小时 下载了十几个免费试用版 但似乎没有任何效果 Adobe Acrobat
  • npm install -g less 不起作用:EACCES:权限被拒绝

    我正在尝试在 phpstorm 上设置 less 以便我可以在保存时将 less 文件编译为 css 我已经安装了node js和下一步 根据这个https www jetbrains com webstorm help transpili
  • Android ListView 具有多个选择和自定义适配器

    我有一个ListView使用自定义适配器 这ListView允许多项选择 但不知何故它无法识别何时选择了某个项目 我已经使适配器项目扩展为 Checkable 但仍然getCheckedItemPositions 返回一个包含 false
  • 使用控制台让 python 在 Windows XP 上以 UTF8 打印

    我想在 Windows XP 上配置我的控制台以支持 UTF8 并让 python 检测到它并使用它 到目前为止 我的尝试 C Documents and Settings Philippe gt C Python25 python exe
  • Parallel.ForEach 与 BlockingCollection 集成时停止

    我根据中的代码采用了并行 消费者的实现这个问题 class ParallelConsumer
  • Bundle.setup 和 Bundle.require 有什么区别

    From gemfile 手册页 我了解到有两种方法import您在中指定的宝石Gemfile The bundle setup将 安装程序将 gems 添加到 Ruby 的加载路径 同时bundle require将需要所有宝石 这两种方
  • Python Pandas 替换特殊字符

    由于某种原因 我无法让这个简单的语句适用于 它似乎对其他任何事情都有效 但不喜欢那个角色 有任何想法吗 DF NAME DF NAME str replace n Thanks 我假设您在这里使用 Python 2 x 这可能是 Unico
  • 如何保护 JavaScript 文件?

    我知道隐藏源代码是不可能的 但是 例如 如果我必须将 JavaScript 文件从 CDN 链接到网页 并且我不希望人们知道该脚本的位置和 或内容 是这样吗 可能的 例如 要链接网站上的脚本 我们使用 现在 是否可以向用户隐藏脚本的来源 或