如何隐藏 JavaScript 中的变量值?
How do I hide a variable value in JavaScript?
我目前正在做一个 JavaScript 项目并且知道 JavaScript 源代码可以通过浏览器访问。在代码中,我有一个变量存储程序使用的秘密字符串。但是,我不想让别人查看源代码,找出这个变量的值。 是否有隐藏变量值的方法?或者是否可以在之后更改变量值?例如,更改实际源代码以将变量设置为不同的值?此变量仅在第一次加载图像时使用,因此如果可能的话,完全删除它也是可以的。
Javascript 在客户端上是 运行,所以我认为这是不可能的。任何你需要保密的东西都需要在服务器端。
JavaScript是客户端,反正也没有什么隐藏代码。
您可以做什么: 防止普通用户看到它(也就是让它更难找到)
我的建议是使用某种密码(最好不是在线加密工具)来加密数据。这会阻止最懒惰的 人看到它。
(假设实际上没有人试图找到这个神秘的值)
您无法向程序员隐藏 JavaScript 内容。他们可以随时打开开发人员控制台并获取您的所有变量。
更糟糕的是,他们可以使用所述控制台直接绕过任何 JavaScript 验证,因此它不是您的主要安全措施。
如果这是您必须隐藏或保护的东西,您必须研究服务器端解决方案。
好吧,您可以将整个代码放入一个函数中,然后在同一个脚本中执行它。这对我有帮助。
你问的暂时不可能。
但是有一个 JavaScript 提议 Function implementation hiding,顾名思义,它隐藏了函数实现以防止被观察到。该提案起源于 2019 年年中,目前处于第 2 阶段(共 4 个阶段)。我个人怀疑它是否会成为标准的一部分,但如果确实如此,理论上你可以将秘密隐藏在隐藏函数的 body 中:
function fetchData() {
"sensitive"; // ← the proposal
const SECRET = "VGhlIG1lc3NhZ2UgaXM6IFIyeHZjbmtnZEc4Z1ZXdHlZV2x1WmZDZmg3cnduNGVt";
return fetch(DATA_URL, {
headers: {
"Authorization": `Bearer ${SECRET}`,
},
});
}
无法通过调试器或 fetchData.toString()
检查 SECRET
变量。但是,Authorization
header 的值在控制台的网络选项卡中可见,因此整个事情不适合此用例。
我目前正在做一个 JavaScript 项目并且知道 JavaScript 源代码可以通过浏览器访问。在代码中,我有一个变量存储程序使用的秘密字符串。但是,我不想让别人查看源代码,找出这个变量的值。 是否有隐藏变量值的方法?或者是否可以在之后更改变量值?例如,更改实际源代码以将变量设置为不同的值?此变量仅在第一次加载图像时使用,因此如果可能的话,完全删除它也是可以的。
Javascript 在客户端上是 运行,所以我认为这是不可能的。任何你需要保密的东西都需要在服务器端。
JavaScript是客户端,反正也没有什么隐藏代码。
您可以做什么: 防止普通用户看到它(也就是让它更难找到)
我的建议是使用某种密码(最好不是在线加密工具)来加密数据。这会阻止最懒惰的 人看到它。
(假设实际上没有人试图找到这个神秘的值)
您无法向程序员隐藏 JavaScript 内容。他们可以随时打开开发人员控制台并获取您的所有变量。
更糟糕的是,他们可以使用所述控制台直接绕过任何 JavaScript 验证,因此它不是您的主要安全措施。
如果这是您必须隐藏或保护的东西,您必须研究服务器端解决方案。
好吧,您可以将整个代码放入一个函数中,然后在同一个脚本中执行它。这对我有帮助。
你问的暂时不可能。
但是有一个 JavaScript 提议 Function implementation hiding,顾名思义,它隐藏了函数实现以防止被观察到。该提案起源于 2019 年年中,目前处于第 2 阶段(共 4 个阶段)。我个人怀疑它是否会成为标准的一部分,但如果确实如此,理论上你可以将秘密隐藏在隐藏函数的 body 中:
function fetchData() {
"sensitive"; // ← the proposal
const SECRET = "VGhlIG1lc3NhZ2UgaXM6IFIyeHZjbmtnZEc4Z1ZXdHlZV2x1WmZDZmg3cnduNGVt";
return fetch(DATA_URL, {
headers: {
"Authorization": `Bearer ${SECRET}`,
},
});
}
无法通过调试器或 fetchData.toString()
检查 SECRET
变量。但是,Authorization
header 的值在控制台的网络选项卡中可见,因此整个事情不适合此用例。