Javascript 防止在网页上刮取变量

Javascript 防止在网页上刮取变量,javascript,regex,xpath,Javascript,Regex,Xpath,假设您有一个带有如下变量的javascript: <script type="text/javascript" > ...some javascript... var secret = 123; ...some javascript... </script> …一些javascript。。。 var-secret=123; …一些javascript。。。 假设您能够在服务器端编写此javascript。是否可以使用正则表达式或Xpath防止它被刮取 我已经将服务器

假设您有一个带有如下变量的javascript:

<script type="text/javascript" >
...some javascript...
var secret = 123;
...some javascript...
</script>

…一些javascript。。。
var-secret=123;
…一些javascript。。。
假设您能够在服务器端编写此javascript。是否可以使用正则表达式或Xpath防止它被刮取

我已经将服务器端的变量名更改为随机变量名


这里的目标不是击败一个花时间消化我的代码并在客户端进行修改的人(我知道我无法阻止这一点)。更重要的是,自动化脚本很难/不可能获取变量。如果有足够的时间,人类比机器更善于抓取代码。

简单的答案是否定的

稍微长一点的答案是变量的值总是以明文形式传输到浏览器,因此总是可以从JavaScript中删除,因为它将以可预测的方式声明(或使用)

作为一个创造者,你唯一能控制的就是使它难以通过编程方式提取。这可能是通过以随机方式更改每个页面加载上的value/secret的位置和形式,使任何令牌仅能一次性使用,以及通过加密/编码*内容来实现的

这并不会阻止对机密的访问,只会让它变得不那么容易,而这取决于用户对浏览器的访问级别。一旦你接受了这一点,它就归结为一个成本/收益分析,与收益相比,你希望在这方面付出多少努力


*如果以某种方式对值进行编码,则JavaScript中会有一个解码函数,使编码的变量能够传递到解码函数中。或者可以替换任何功能。为了进一步阅读,请看一看JavaScript加密/解密的几次尝试。

简短的回答是否定的

稍微长一点的答案是变量的值总是以明文形式传输到浏览器,因此总是可以从JavaScript中删除,因为它将以可预测的方式声明(或使用)

作为一个创造者,你唯一能控制的就是使它难以通过编程方式提取。这可能是通过以随机方式更改每个页面加载上的value/secret的位置和形式,使任何令牌仅能一次性使用,以及通过加密/编码*内容来实现的

这并不会阻止对机密的访问,只会让它变得不那么容易,而这取决于用户对浏览器的访问级别。一旦你接受了这一点,它就归结为一个成本/收益分析,与收益相比,你希望在这方面付出多少努力


*如果以某种方式对值进行编码,则JavaScript中会有一个解码函数,使编码的变量能够传递到解码函数中。或者可以替换任何功能。为了进一步阅读,请看一看JavaScript中加密/解密的几次尝试。

您可以将代码包装在函数中,然后调用它:
(函数(秘密){..do thing with secret here..})(123);console.log(秘密);//无法在此访问机密
是否可以在服务器端安全地加密/解密值?通过这种方式,您只需传递加密的值,这对任何可以从JS获取它的人来说都是无用的。@JosephGabriel在本例中,客户端需要它。但我不想让淘气的人编写插件来改变我网站的行为。@AmyNeville不要使用假设,这无助于了解你的情况。你想在什么环境下实现什么?在不知道的情况下,你的问题有太多可能的答案。@AmyNeville不幸的是,要阻止别人篡改你的JavaScript代码是不可能的。正如塞巴斯蒂安所建议的那样,多解释一下这个问题,也许有人能提供一个实际的解决方案。正确的模糊处理是一个很好的开始。您可以将代码包装在函数中,然后调用它:
(函数(秘密){..在这里使用秘密处理..})(123);console.log(秘密);//无法在此访问机密
是否可以在服务器端安全地加密/解密值?通过这种方式,您只需传递加密的值,这对任何可以从JS获取它的人来说都是无用的。@JosephGabriel在本例中,客户端需要它。但我不想让淘气的人编写插件来改变我网站的行为。@AmyNeville不要使用假设,这无助于了解你的情况。你想在什么环境下实现什么?在不知道的情况下,你的问题有太多可能的答案。@AmyNeville不幸的是,要阻止别人篡改你的JavaScript代码是不可能的。正如塞巴斯蒂安所建议的那样,多解释一下这个问题,也许有人能提供一个实际的解决方案。正确的模糊处理是一个良好的开端。