在全球范围内公开网络应用功能 - 是或不是?

时间:2013-08-23 11:01:13

标签: javascript security

如您所知,Web应用程序通常使用JavaScript将功能附加到DOM元素,以便用户可以与应用程序进行交互。

但是,我很惊讶一些Web应用程序在全局空间中公开这些功能,以便我可以在浏览器控制台中执行它们。这被认为是易受伤害的,也是一种不好的做法?

例如,通过使用这些公开的函数,我可以创建一个脚本并在控制台中运行它来执行一些预期不会发生的创造性事情。

出于这个原因,我是否应该尽可能地在控制台中隐藏对我的Web应用程序的访问?很明显我应该这样做,但我可能错了,因为我对网络开发还很陌生。

1 个答案:

答案 0 :(得分:3)

我认为这主要是基于意见的问题,可能不太适合SO的格式。但我想回答,所以我会用CW回答。

避免创建全局变量的主要原因不是代码的安全性或隐私性。您的客户端JavaScript代码是公共知识。任何想知道你的代码所做的事情的人都可以找到,只需下载你的脚本并查看它们即可。即使您对脚本进行了模糊处理,也有一些好的非混淆器可以帮助它们再次可读。 Google的Closure Compiler,特别是高级设置,使真的很难,但你所做的大部分工作都可以被理解。

不,不创建更多全局变量的主要原因是全局命名空间已经 真的 拥挤,因此创建更多全局变量会让您面临冲突的风险您可能想要包含的脚本和其他脚本。全局命名空间在浏览器上特别拥挤,因为浏览器会将各种内容转储到其中,包括具有id的每个元素的属性(属性名称为id,值为元素,在大多数浏览器上。)

最佳做法是不要公开任何全局 。如果 拥有全局变量,只需要一个,这是一个对象,你需要放置任何东西。