我目前正在开发一个JavaScript项目,知道JavaScript源代码可以通过浏览器访问。在代码中,我有一个变量存储了程序使用的秘密字符串。然而,我不希望其他人查看源代码并找到这个变量的值。有没有一种方法可以隐藏变量的值?或者在之后改变变量的值?例如,更改实际的源代码以将变量设置为不同的值?这个变量仅在加载图像时第一次使用,如果可能的话完全删除它也是可以的。
你无法将 JavaScript 内容对程序员隐藏。他们可以打开开发者控制台并获取您所有的变量。
更糟糕的是,他们可以使用该控制台直接绕过任何 JavaScript 验证,因此它不能成为您的主要安全解决方案。
如果它是必须要隐藏或保护的内容,您必须考虑使用服务器端解决方案。
你所问的目前是不可能的。
但有一个 JavaScript 提案函数实现隐藏,正如其名称所示,它可以隐藏函数实现以防被观察到。该提案始于2019年中期,目前处于第2阶段(共4个阶段)。我个人怀疑它是否会成为标准的一部分,但如果确实如此,在理论上,你可以将秘密隐藏在一个隐藏函数的主体内:
function fetchData() {
"sensitive"; // ← the proposal
const SECRET = "VGhlIG1lc3NhZ2UgaXM6IFIyeHZjbmtnZEc4Z1ZXdHlZV2x1WmZDZmg3cnduNGVt";
return fetch(DATA_URL, {
headers: {
"Authorization": `Bearer ${SECRET}`,
},
});
}
SECRET
变量无法通过调试器或fetchData.toString()
进行检查。但是,在控制台的网络选项卡中,Authorization
头的值是可见的,因此整个过程不适用于此用例。
JavaScript 是客户端的,实际上没有任何方法可以隐藏代码。
你可以做的:防止普通用户看到它(即使让它更难找到)
我的建议是使用某种密码加密数据(最好不要使用在线加密工具)。这可以阻止大多数懒惰的人看到它。
(假设没有人真的试图找到这个神秘的值)
嗯,你可以将整个代码放入一个函数中,然后在同一脚本中执行它。这对我很有帮助。
(function(){ const x = prompt("give me a secret"); ... })()
中注入调试器关键字? - user985399prompt("password")
的秘密字符串,在大多数浏览器中应该相当安全。 - user985399