当前位置:主页 > DDOS和CC >

国内高防cdn_cdn如何防ddos_指南

时间:2021-06-11 17:35来源:E度网络 作者:E度网络 点击:

国内高防cdn_cdn如何防ddos_指南

简介:作为我研究工作的一部分,我让自己更加熟悉新的MVC框架,最有趣的是AngularJS。我想和大家分享我分析AngularJS内置表达式功能的过程,因为我觉得这是一个非常有趣和独特的代码库。AngularJS公开了一种表达式语言,https防御cc,它向HTML模板公开有限的JavaScript集。这些表达式在AngularJS应用程序的ng app指令中求值表达:什么是AngularJS表达式?AngularJS表达式是JavaScript的一个有限子集。它们包含在具有已定义的ng app或ng controller指令的html元素中。他们的网站很好地记录了Angular和JavaScript之间的区别,但关键点如下:无法访问全局(窗口)上下文没有控制流;没有循环或异常。但是,三元JavaScript语句是可能的,例如:{{something?某事是真的:某事是假的无法声明函数不支持正则表达式文本表示法Scope对象在我们开始解释如何计算表达式之前,我们必须先讨论范围对象。scope对象是传递给控制器的对象。典型的控制器如下所示:角度模块('scopeExample',[]).controller('MyController',['$scope',函数($scope){$用户名.scope="世界";$scope.sayHello=功能(){$范围.问候语='你好'+$作用域.用户名+ '!';};}]);控制器"MyController"将用户名字符串和sayHello函数绑定到其作用域。运行sayHello之后,greeting也将绑定到MyController范围。这意味着HTML中的表达式现在可以访问这些值:

{{username}}{{sayHello();问候语}}

在作用域也可以嵌套,因此可以有内部作用域和外部作用域。但是,cc防御工具,对可以访问的内容没有限制。以下面的例子为例:

{{outerData}}
访问子级:{{$$childHead.innerData}}

{{innerData}}
在访问父级:{{$父级.outerData}}

在在在上面的示例中,内部作用域可以通过获取对$$childHead属性的引用来访问外部范围。外部作用域可以通过访问$parent属性访问内部作用域。从1.4.1开始,Scope对象具有以下属性和方法功能范围(){this.$id=nextUid();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=此$$previsbling=this.$$childHead=this.$$childTail=null;//对各种范围对象的一系列引用。在创建范围或调用$new时设置。this.$root=this;//对self的引用this.$$destroyed=false;//此作用域是否已销毁this.$$listeners={};//侦听器对象从$on设置并从$emit和$broadcast访问this.$$listenerCount={};//侦听器数this.$$isolateBindings=null;//是否为指令隔离作用域。}范围.原型= {构造器:范围,$new:函数(隔离,父){。。。},//创建一个新的作用域,设置进程中的子级/父级/同级。$watch:function(watchExp,listener,objectEquality){。。。},//注册一个"listener"回调,以便在"watchExpression"更改时执行。$watchGroup:函数(watchExpressions,listener){。。。},//上述变量$watchCollection:函数(obj,listener){。。。},//shall监视对象的属性,并在任何属性更改时激发$digest:function(){。。。},//处理当前作用域及其子级的所有Scope#$watch观察者。$destroy:function(){。。。},//从父作用域中删除当前作用域(及其所有子对象)。$eval:function(expr,locals){。。。},//对当前作用域执行"expression"并返回结果。$evalAsync:函数(expr,locals){。。。},//稍后在当前作用域上执行表达式。$$postDigest:函数(fn){。。。},//将fn添加到数组中,并在$digest()末尾调用函数$apply:function(expr){。。。},//此方法用于从angular框架外部执行angular表达式。不要从表达式中调用它,它将陷入$digest/$watch的无限循环中$applyAsync:函数(expr){。。。},//计划稍后调用$apply。与上述警告相同。$on:函数(名称,侦听器){。。。},//侦听给定类型的事件。$emit:function(name,args){。。。},//通过作用域层次结构向上发送事件"name",通知侦听器上已注册的$。$broadcast:function(name,args){。。。},//将事件"name"向下分派到所有子范围(及其子范围),通知侦听器上已注册的$。}从HTML计算表达式时,只能使用Scope对象。在任何时候都不能访问全局窗口对象。从研究的角度来看,这将我们的攻击面缩小到这些方法以及我们可以从我们创建的对象调用的任何内置javascript方法。在表达式中创建的对象隐式绑定到当前范围对象,该对象由表达式在ng应用程序或控制器中的位置确定。

{{x=1234;}}

在在上面的例子中,将x定义为一个看似全局的变量实际上是在内部被设置为当前Scope对象的一个属性。如果您尝试调用eval或parseInt之类的"global"函数,百度云加速能防御cc,它们将失败,因为您调用的任何函数都必须绑定到Scope对象。鉴于此,我们可以从注入表达式调用$eval、$apply、$on、$emit或其他Scope方法,因为它们存在于我们当前的Scope对象中。另外,我们可以调用toString或valueOf,因为它们绑定到所有对象(包括我们的范围对象),注意这与调用范围.toString(), 范围价值().在我开始讨论我如何试图突破沙盒的范围(但失败了)之前,我们需要介绍一下表达式是如何被解析和编译的。如何编译和计算表达式这一切都是从Scope.$eval()开始的,HTML页面中的表达式被传递到eval中。$eval()使用表达式的字符串表示形式调用内部解析器。大多数安全检查都包含在$ParseProvider.$parse的调用中。$ParseProvider。$parse:首先,使用自定义Lexer解析表达式。如果启用了内容安全策略,这些选项也会传递到lexer和自定义解析器中。//ParseProvider。$parse第13957行:var parseOptions=费用检查?$parseOptions昂贵:$parseOptions;var lexer=新的lexer(parseOptions);var parser=新解析器(lexer,$filter,服务器如何防御cc攻击,parseOptions);解析表达式=解析器.parse(exp);//魔法在这里发生解析器.parse调用AST(抽象语法树)对象来编译表达式。AST编译器在内部调用lexer,将表达式分解为各种标记/语句。下面是lexer从输入"y=toString"创建的标记的图像。注意各种属性(y是标识符,=是运算符等)。然后,这个lexer数据被输入AST的程序函数(见上图),这个函数将令牌转换为一个正确的AST模型。下面是解析y=toString的AST结果:完成后,它将获取AST模型并将其编译为一个JavaScript字符串。AST上的递归循环获取标识符并将其重命名为泛型变量,如v1、v2、v3等。在此递归过程中,每个标识符都在一个定义为:函数ensureSafemberName(name,fullExpression){如果||名称==="\uu lookupGetter|"| |名称==="\uuu lookupSetter"||名称==="\uuu proto"{抛出$parseMiner('isecfld','试图访问角度表达式中不允许的字段!'+'表达式:{0},网站怎么防御cc,fullExpression);}返回名称;}此函数可防止有人试图在对象上定义setter/getter或函数原型,这在过去的沙盒旁路中被利用"y"在这里是安全的,所以它只返回而不抛出错误。稍后将为名为isPossiblyDangerousMemberName的同一标识符调用另一个安全函数:对我们来说,y!='constructor'所以我们在这里也很安全。否则,编译后的代码将在对ensureSafeObject的调用中包装访问尝试。让我们看看它目前生成的代码:下面是生成的"body":v2=v3?l:秒;如果(!(v3)){如果{v1=s.y;}}其他{v1=l.y;}如果(v2!=空){请注意,我们的标识符"y"是如何附加到s和l(这是Scope的缩写,Scope对象,l是局部变量,任何局部变量)。这对于值和属性可以使用什么有一些有趣的含义,正如我在上面的范围对象描述中所回避的那样。然后,它继续使用toString标识符执行相同的调用。当它是

推荐文章
最近更新