2012-10-08 32 views
2

本质上,我想在客户端中存储一个变量,我不希望人们查看或更改。外部开发人员可以在运行时访问闭包变量吗?

在下面的代码示例:

(function() { 
    var foo = 'bar'; 
})(); 

任何人都可以使用的工具或浏览器来访问和/或(更重要的)改变foo的价值?链接到更多的信息或工具,可能会这样做,将不胜感激。我会在同一时间进行更多的研究。

在此先感谢

+6

人们可以使用浏览器来完全重写你的js,如果他们愿意的话。 – geekchic

+1

客户端可以看到您的源代码,并可以对它做任何事情,它可能不是浏览器或您知道的任何应用程序。 – RobG

+0

...这都是因为Javascript执行客户端而不是服务器端。如果将用户的这些信息隐藏起来,不要依赖JS。 – inhan

回答

3

是的,他们可以修改foo的值。作为一般规则,如果您不希望客户端操纵该值,请不要让他们访问它(即将用户标识或此类信息放在DOM或客户端)。您可能需要做一些state management研究,加密的Cookie中,会话或者如果你使用ASP.NETViewState/ViewBag

+0

我知道那些开发工具,但我正在寻找一种具体的方式,可以在匿名关闭中实际更改变量。如果在控制台中输入log(foo),它将会是未定义的,因为它不是全局的。它也不是字典(对象)的一部分,所以它不能作为成员访问。 –

+0

@BrianCray客户端的变量可以被操纵。例如,我可以使用我的浏览器将foo =“bar”的值更改为foo =“Darren”。我可以根据需要引入更多变量,甚至可以使用我的自定义变量数据将数据发送到您的服务器。你究竟想达到什么目的? –

0

这可能注入的JavaScript嵌入任何网页,并从那里你可以操纵每一个JavaScript对象/变量在页面上。因此,JavaScript正在接收的任何数据都应该加密(如果您担心安全问题)。

为了给您一点提示,请尝试打开您的开发人员工具。在chrome中,Control-Shift-I。单击脚本选项卡,然后您将看到脚本正在使用的所有变量。可以在脚本中的任何位置双击并添加/删除代码段。

F.Y.I如果您使用Firefox,我强烈建议使用Firebug。它超越了chrome的开发工具,但是我发现chrome速度更快。至少在我的慢速笔记本电脑(Ubuntu FTW)上。

希望这会有所帮助

+1

我知道那些开发工具,但我正在寻找一种特定的方式,可以在匿名关闭中实际更改变量。如果在控制台中输入log(foo),它将会是未定义的,因为它不是全局的。它也不是字典(对象)的一部分,所以它不能作为成员访问。 –

+0

使用代码中的正确断点,可以修改任何对象/变量。他们可以在将属性分配给一个对象之后立即设置一个断点,并将其改为任何他们想要的。如果安全是问题,那么JavaScript正在接收的任何数据都应该被加密。 – LukeStoneHm

相关问题