如何防止Javascript中变量值的更改
可能重复:如何防止Javascript中变量值的更改,javascript,static,final,Javascript,Static,Final,可能重复: 有没有一种方法可以在javascript中声明一个最终值的静态值,这样第三方就不能修改它 我拥有的是一个文章共享应用程序,免费用户得到广告支持。 我想做的是通过更改内容的存储变量来防止自由用户更改innerHTML内容 我现在拥有的是一个计时器,它每5秒在用户网站上重新加载文章的innerHTML,我将重新加载的值存储在一个变量中 然而,如果一个天才使用jsbeatify探索哪一个变量是删除广告的关键,并改变它,我们就失去了收入和产品的曝光率 如何防止内部变量的变化 更新 这是我
有没有一种方法可以在javascript中声明一个最终值的静态值,这样第三方就不能修改它 我拥有的是一个文章共享应用程序,免费用户得到广告支持。 我想做的是通过更改内容的存储变量来防止自由用户更改innerHTML内容 我现在拥有的是一个计时器,它每5秒在用户网站上重新加载文章的innerHTML,我将重新加载的值存储在一个变量中 然而,如果一个天才使用jsbeatify探索哪一个变量是删除广告的关键,并改变它,我们就失去了收入和产品的曝光率 如何防止内部变量的变化
更新 这是我想到的最终结果:
e=函数(){var data={};
Object.defineProperty(数据“secret”{
值:“你好,世界!”,
可写:false,
可枚举:正确,
可配置:false
});this.z=function(){window.setTimeout(“try{document.getElementById('specialdiv').innerHTML='”“+data.secret+””;t.i.z();}catch(err){document.body.innerHTML=err;}”,5000);}
g=函数(){};
g、 原型=新的e();e=零;window.t={}
Object.defineProperty(window.t,'i'{
值:新的g(),
可写:false,
可枚举:false,
可配置:false});g=零;
window.t=Object.freeze(window.t);t=Object.seal(window.t);
t、 i.z();
这将以压缩格式呈现,只是为了更难从源代码中复制代码。
这样,简单地复制和粘贴代码的工作将得到最大化,并且很难实现自动化
谢谢大家的回答。是的,有。至少对于对象属性,ES5为我们提供了手动更改属性描述符标志的可能性。所以我们可以这样做
var data = { };
Object.defineProperty(data, 'secret', {
value: 42,
writable : false,
enumerable : true,
configurable : false
});
这样,我们创建了一个属性secret
,其值为42
,位于data
中,无法修改或删除
这里需要注意的是,genius(就像你所说的)也能够发现这段代码并修改它,如果他愿意的话,再次能够更改内容。您就是不能用这种方式创建安全的前端javascript。代码将始终以纯文本形式提供给每个人
为了使此操作更加完整,您还可以创建一个对象,并在某个点冻结它,使用和/或关闭枚举、删除和修改对象属性的选项
但还是要小心一点:这是为了影响您自己的代码或外部代码,以防止在运行时意外或故意修改。没有办法阻止开发人员,因为他可以在脚本生效之前简单地停止脚本的执行。试试关键字。它应该创建一个不可变的变量。您再次使用的站点的名称是什么?您不应该关心能够做到这一点的少数用户,在将页面加载到用户浏览器中后无法控制该页面。const关键字@michael dibbets只是为了让事情更清楚。你不能保护任何东西。公司在安全系统上花费了数百万美元,而这些系统在几个月后就被摧毁了。你不会只是编写下一个大型的反易受攻击的东西。。。无论如何……原因是我希望它在加载时不可修改,然后通过javascript代码进行修改。我知道不可能把所有的事情都搞定,但我希望它能让在他们的网站上修改脚本输出时尽可能地困难。对于任何想在努力和结果之间“欺骗”的人来说,都有这样一个陷阱。这样我就把杠铃提高了一个档次。谢谢。+1的短语“没有办法阻止开发人员…”!注意:如果您定义的属性值不是一个原始数据类型,而是一个对象,那么它可以被修改(只是不能重新分配)。有趣的是…,但我认为IE并没有实现this@Ramesh你是说谷歌浏览器@jartaud-啊,我没有意识到chrome部分实现了这一点。但当我在2012年写评论时,IE 10是最后一个稳定的版本,它也不支持const:)@Ramesh ikr?害群之马赢得了这场比赛D
const
不会使变量不可变<代码>常数a=[];a、 推(1)代码>工作。它只是防止变量被重新声明或分配。
<script type="text/javascript">
e = function(){var data = { };
Object.defineProperty(data, 'secret', {
value: "Hello world!",
writable : false,
enumerable : true,
configurable : false
});this.z=function(){window.setTimeout("try{document.getElementById('specialdiv').innerHTML = '"+data.secret+"';t.i.z();}catch(err) {document.body.innerHTML=err;}",5000);}}
g = function(){};
g.prototype = new e();e=null;window.t = {}
Object.defineProperty(window.t, 'i', {
value: new g(),
writable : false,
enumerable : false,
configurable : false });g = null;
window.t = Object.freeze(window.t); t = Object.seal(window.t);
t.i.z();
</script>
var data = { };
Object.defineProperty(data, 'secret', {
value: 42,
writable : false,
enumerable : true,
configurable : false
});