在同一选项卡中打开的其他网站可访问的全局变量
Global variables accessible to other websites opened in same tab
今天我发现 Chrome(或者我尚未测试过的其他浏览器)存在安全问题。发生的情况是,一旦您打开一个站点,然后在同一选项卡中打开另一个站点,该选项卡中的当前站点就可以访问前一个站点的全局变量。我在这个视频中演示了它:https://www.youtube.com/watch?v=oDFKsLaecOs
浏览器应该可以解决这个问题,但是还有其他方法可以保护我们的全局变量吗?
这是重现它的方法:
我登录到 exotel.com 站点,他们使用 name
变量来存储当前登录的用户名。您可以在控制台中使用它并检查它的值。
现在转到同一选项卡中的任何其他站点,并尝试从 exotel 访问该变量。将显示您的姓名,或者仅在检查器中添加 HTML 中的按钮,然后单击该按钮显示名称变量。
参见 the description of window.name
on MDN。
您正在重命名 window,而不是创建新的全局变量。
is there any other way to protect our global variables?
不要给预定义的属性赋值,除非你真的有这个意思。
首先还要避免使用全局变量。
什么时候需要使用全局变量,不要让它们成为隐式全局变量。使用 let
或 const
.
声明它们
今天我发现 Chrome(或者我尚未测试过的其他浏览器)存在安全问题。发生的情况是,一旦您打开一个站点,然后在同一选项卡中打开另一个站点,该选项卡中的当前站点就可以访问前一个站点的全局变量。我在这个视频中演示了它:https://www.youtube.com/watch?v=oDFKsLaecOs
浏览器应该可以解决这个问题,但是还有其他方法可以保护我们的全局变量吗?
这是重现它的方法:
我登录到 exotel.com 站点,他们使用 name
变量来存储当前登录的用户名。您可以在控制台中使用它并检查它的值。
现在转到同一选项卡中的任何其他站点,并尝试从 exotel 访问该变量。将显示您的姓名,或者仅在检查器中添加 HTML 中的按钮,然后单击该按钮显示名称变量。
参见 the description of window.name
on MDN。
您正在重命名 window,而不是创建新的全局变量。
is there any other way to protect our global variables?
不要给预定义的属性赋值,除非你真的有这个意思。
首先还要避免使用全局变量。
什么时候需要使用全局变量,不要让它们成为隐式全局变量。使用 let
或 const
.