AngularJs 控制台中的范围变量

AngularJs scope variables in console

我知道我们可以使用 batarang(chrome 扩展名)和 angular.element(document.querySelector('selector')).scope()

访问作用域变量

我能够在 angular.io, angularjs.org

中访问范围、控制器

但我遇到了一个 angularJs 网站 (www.paytm.com),它可以阻止我访问控制台、控制器等中的范围变量。

  1. 如何阻止用户访问范围变量?
  2. 即使我阻止了,用户是否可以通过任何方式访问范围变量?
  3. 如果我阻止用户访问范围数据,我会有任何额外的安全措施吗?

我无法发表评论,因为我没有足够的声誉,但即使我不能回答你的第一个问题,我可以对其他两个问题给出一些见解:

  1. Even if I block, is there any way that users may access the scope variables?

是的。每次您在客户端计算机中 运行 应用程序代码时,都可以访问有关 运行 内容的信息。这适用于在客户端运行的每个代码。

虽然您可以尝试让恶意用户更难发现数据,但您无法真正保证数据免受所有危害。

在 angularjs 应用程序的特定情况下,请记住您的代码可以从浏览器访问并且任何用户都可以使用它(即使它是捆绑和缩小的!)。因此,在受控环境中对应用程序进行逆向工程 运行 并不难。

  1. Will I have any extra security if I block users from accessing scope data?

好吧,这是有争议的。正如我在 2 中解释的那样,仍然可以访问您的范围变量,这可能会更难。我认为这里真正的问题应该是:"Do I care if someone have access to my scope variables?"

这个问题的答案应该始终是肯定的。您在客户端持有哪些敏感信息?它应该在那里吗?请记住,每个敏感信息都应加密存储,并且只能在加密通信中通过网络传递。如果客户端有一些你绝对不允许访问的逻辑,它应该在服务器端。这就是您可能会发现的大多数敏感信息问题的答案。

TLDR: 人们仍然可以访问您的范围。你应该设计你的应用程序,所以你不关心它。

本站使用

$compileProvider.debugInfoEnabled(false)

哪个主要任务是to improve app performance

虽然它可以(松散地)被认为是针对 RE 的反制措施的一部分,但我严重怀疑这对于任何能够对混淆的应用程序进行逆向工程的程序员来说都是一个问题。如果您不想破坏代码库,请不要在客户端使用它。

Even if I block, is there any way that users may access the scope variables?

当然可以。

var scope;
angular.element(document.body).injector().invoke(function ($rootScope) {
  scope = $rootScope;
  console.log(scope);
});

或者简单地 angular.reloadWithDebugInfo(),如上面的指南所建议的。