You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS表达式中$on.constructor的作用是什么?

$on.constructor在AngularJS XSS payload中的作用

你遇到的这个是AngularJS 1.x版本沙箱绕过的经典payload,$on.constructor的核心作用就是绕开Angular对表达式的执行限制,拿到原生JS的Function构造器,最终实现任意代码执行。

具体拆解逻辑:

  • AngularJS的双大括号{{}}表达式默认跑在沙箱环境里,不是直接执行原生JavaScript:沙箱会拦截对window、Function这类高危全局对象的直接访问,你要是直接在{{}}里写alert(1)或者new Function('alert(1)')(),会直接被沙箱拦下报错,根本跑不起来。
  • $on是AngularJS作用域(scope)对象上自带的内置方法,作用是绑定作用域级别的事件监听,属于Angular默认允许在表达式里访问的合法属性,不会触发沙箱拦截。
  • 所有JavaScript函数的.constructor属性,都指向原生的Function构造函数——这是JS语言本身的特性,和函数是谁定义的没关系。所以写$on.constructor本质就是绕了个弯,不用直接引用全局的Function,就拿到了被沙箱禁止直接访问的原生Function构造器。

把整个payload串起来看逻辑就很顺了:

  1. $on.constructor('alert(1)')等价于new Function('alert(1)'),把传入的字符串编译成一个原生可执行的JS函数
  2. 末尾的()就是调用这个刚生成的函数,最终执行alert(1)触发弹窗,完成XSS利用。

这类绕过的核心思路其实很简单:Angular沙箱只会拦截你直接写Function的场景,没防住“通过合法可访问的对象反查它的构造器”这条路径,后续很多Angular沙箱绕过的变种,本质都是换了个Angular允许访问的函数/对象来取constructor,原理完全一致。

内容的提问来源于stack exchange,提问作者questioner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:03:50