如您所知,Web 应用程序通常使用 JavaScript 将函数附加到 DOM 元素,以便用户可以与应用程序进行交互。
但是,令我感到惊讶的是,一些 Web 应用程序在全局空间中公开了这些函数,以便我可以在浏览器控制台中执行它们。这被认为是脆弱的和不好的做法吗?
例如,通过使用这些暴露的函数,我可以创建一个脚本并在控制台中运行它来做一些意想不到的创造性事情。
出于这个原因,我是否应该始终努力在控制台中尽可能隐藏对我的 Web 应用程序的访问?显然我应该这样做,但我可能是错的,因为我对 Web 开发仍然很陌生。
我认为这主要是一个基于意见的问题,可能不太适合 SO 的格式。但我想回答,所以我会用 CW 来回答。
避免创建全局变量的主要原因不是代码的安全性或隐私性。您的客户端 JavaScript 代码是公共(public)知识。任何想知道您的代码功能的人都可以找到答案,只需下载您的脚本并查看它们即可。即使你混淆了你的脚本,也有很好的反混淆器可以帮助它们再次可读。 Google 的 Closure Compiler,尤其是高级设置,让这真的变得困难,但你正在做的大部分事情都是可以理解的。
不,不创建更多全局变量的主要原因是全局命名空间已经真的拥挤,因此创建更多全局变量会使您面临以下冲突的风险你的和其他你可能想要包括的脚本。全局命名空间在浏览器中特别拥挤,因为浏览器将各种东西转储到其中,包括每个具有 id
的元素的属性(属性名称是 id
,在大多数浏览器上,该值是元素)。
最佳做法是根本不要公开任何全局变量。如果您必须拥有全局变量,那么只需要一个,这是一个您可以放置任何需要的对象。