虽然我怀疑在Web应用程序中没有办法制作完全无法触及的JSON对象,但我想知道是否有人有办法维护一个无法使用开发人员工具更改的全局JSON对象'游戏机。我知道将其称为“私有”变量并不是最准确的描述,但是OO语言中私有变量的限制基本上是我想要应用于我的JSON对象的。
我正在开发一个应用程序,它可以让精明的用户与我用于在Javascript文件中存储数据的对象进行交互。
任何关于如何处理此问题的建议都将受到赞赏。
答案 0 :(得分:6)
如果您的Javascript在浏览器中运行,则很容易受到操纵。没有办法解决这个问题。将任何真正的私有数据放在服务器端,并使用AJAX从您的Javascript访问它。
答案 1 :(得分:4)
实际上你可以在javascript和getter方法中使用“私有”变量来访问它们:
你可以这样做:
function privateData(){
var _myVariable = 1;
return {
getData: function(){
return _myVariable;
}
}
}
var myObject = privateData();
myObject._myVariable; //it's undefined
myObject.getData();//returns 1
在此示例中,变量_myVariable在浏览器中不可访问,并且不能由用户以任何方式修改,因为它的本地范围在函数内部。您的函数返回一个可以访问该变量的对象,因为通过返回一个对象,您可以创建一个闭包。
在这种情况下,getData是返回对象的一个属性,可以访问_myVariable,因为它的本地范围是函数privateData的范围。
我推荐书:
对于一些高级的javascript技术
答案 2 :(得分:3)
道格拉斯·克罗克福德http://javascript.crockford.com/private.html的这篇文章可能有所帮助。
但是,请记住,只要代码命中客户端计算机,它就在他们的控制之下。所以不要将它用作任何类型的安全性。答案 3 :(得分:1)
您最好的选择是加密数据或为其提供某种完整性密钥。完整性密钥将是服务器端生成的某些数据的散列加上您将在往返服务器上检查的盐。
加密数据有助于避免客户端的修改;完整性密钥有助于避免在被推送到服务器的客户端上进行修改。
答案 4 :(得分:0)
除非浏览器/引擎支持const
,否则无法完成您的要求答案 5 :(得分:0)
如果它被正确关闭,那么它将无法轻易修改(但如果黑客真的很擅长他们的工作仍然可以)
答案 6 :(得分:0)
我认为不可能让人们更改你在javascript中构建的对象。
每当您使用来自对象的数据时,您可以存储数据的哈希并验证哈希是否仍然正确,但这只会让精明的用户更难以更改对象,这不是不可能的。 (通过混淆来保护,根本不是真正的安全。)
答案 7 :(得分:0)
最高答案是错误的,因为每个人都可以使用开发人员工具重新定义任何功能,还可以检查源代码。这个想法是前端文件中的所有内容都是完全可访问和可操作的。您唯一可以做的就是将对象存储在JSON或txt文件中,并通过Ajax获得它。您可以获取一次并使其在全球范围内可用。 尽管如此,尽管有人看不到JSON文件的结构和内容,但是可以通过检查以对象作为参数调用的函数来猜测它。但这将需要大量的工作和时间,而且除非您反对包含某些私人信息(例如密码),否则没人会对它感兴趣。