我知道我们可以使用batarang
(chrome扩展名)和angular.element(document.querySelector('selector')).scope()
但是我遇到了一个angularJs网站(www.paytm.com),它可以阻止我访问控制台,控制器等中的范围变量。
答案 0 :(得分:3)
我无法评论,因为我没有足够的声誉,但即使我无法回答您的第一个问题,我也可以对其他两个问题提供一些见解:
- 即使我阻止,用户是否可以访问范围变量?
醇>
是。每当您在客户端的计算机上运行应用程序代码时,都可以访问有关运行的信息。这适用于在客户端运行的每个代码。
虽然您可以尝试让恶意用户更难发现数据,但您无法真正保护其免受所有伤害。
在angularjs应用程序的特定情况下,请记住您的代码可以从浏览器访问,任何用户都可以使用它(即使它被捆绑和缩小!)。因此,对应用程序进行逆向工程并在受控环境中运行它并不会太难。
- 如果阻止用户访问范围数据,我是否会有额外的安全性?
醇>
嗯,那是有争议的。正如我在2中解释的那样,仍然可以获得对范围变量的访问权限,这可能会更难。我认为这里真正的问题应该是:"我是否关心是否有人可以访问我的范围变量?"
这个问题的答案应该始终是强调的。你在客户方面有什么明智的信息?应该在那吗?请记住,每个敏感信息都应加密存储,并且只能通过加密通信中的网络传递。如果客户端中存在一些您绝对不允许访问的逻辑,那么它应该位于服务器端。这就是您可能找到的大多数明智信息问题的答案。
TLDR:人们仍然可以访问您的范围。你应该设计你的应用程序,这样你就不会关心它。
答案 1 :(得分:2)
网站使用
$compileProvider.debugInfoEnabled(false)
哪个主要任务是to improve app performance。
虽然它可以(松散地)被视为针对RE的反措施的一部分,但我严重怀疑对任何能够对混淆的应用程序进行逆向工程的程序员来说这都是一个问题。如果您不喜欢破坏代码库,请不要在客户端使用它。
即使我阻止,用户是否可以访问该范围 变量
不确定
var scope;
angular.element(document.body).injector().invoke(function ($rootScope) {
scope = $rootScope;
console.log(scope);
});
或者只是angular.reloadWithDebugInfo()
,如上面的指南所示。