首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不需要括号分号XSS

几年前,我发现了一种在JavaScript中调用函数而不使用括号onerror和throw语句技术。...因为throw是一个语句,所以通常需要onerror使用分号来完成赋值,以便开始一个新语句而不是形成一个表达式。...我遇到了一个过滤括号分号网站,我认为必须能够使用这种技术来执行一个没有分号函数。第一种方法非常简单:您可以使用括号来形成一个块语句,您可以在其中进行onerror分配。...在块语句之后,您可以使用  throw 不带分号(或新行): {onerror=alert}throw 1337 块声明很好,但我想要一个更酷选择。...但相反,只是字符串“错误”: throw new Error("My message")//Error: My message 我显然无法调用该Error函数,因为它需要括号,但我想如果我使用带有Error

2K20
您找到你想要的搜索结果了吗?
是的
没有找到

双引号与括号

区别在于双引号内置换正常进行,而括号置换有可能会被阻止,如下图所示。变量s被赋值为Hello World,注意这里通过双引号避免了空格被当作分隔符处理。...第一个puts命令使用了双引号,可以看到所有置换都随之发生;第二个puts命令使用了括号,相应内部置换均被阻止。 ? 双引号另一常用情形是出现在嵌套命令中,且嵌套命令是外层命令参数一部分。...给变量b赋值时使用了反斜杠置换,给变量c赋值时使用了双引号加括号,其中双引号在最外层,给变量d赋值时使用了括号加双引号,其中括号在最外层,对比下来可以得出这样结论:在同时使用双引号和括号时,最外层做主...对于括号,如前文所述“括号置换有可能会被阻止”,这是因为括号功能稍微复杂一些,但总的来说遵循两个原则:第一个原则是如果括号是用做置换操作,则其内部置换操作会被阻止;第二个原则是如果括号用做界限符...如果需要双引号或括号作为普通字符出现在字符串中时,可通过反斜杠\置换,或者通过双引号和括号嵌套使用实现特定功能,如下图所示。 ?

2.2K10

JS分号可以省掉吗?

背景 最近在项目中开始使用新编码规范,一开始ESLint报一大堆错误,改得我想砸键盘,花了好些时间才适应,下面列出一些代表性规则: 只能使用单引号 函数定义括号和左大括号之间一定要有空格: function...这么简单代码为什么会出错呢?第一反应就是JS引擎将代码生成语法树时候,可能解析不正确。于是,我在第一行末尾加分号测试。...大宗师Douglas Crockford表示要正确使用分号 引用minhan在扯不完 JS 分号问题文中论述: JSON、JSLint、JSMin和ADSafe 创造者、ECMA JavaScript...(d + e).print() 他不会自动插入分号,因为第二行一括号开始,会被误认为是函数。...如果你不想用分号,又怕出问题,v2ex上有位童鞋给出了一个速记方案: 如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 "("、"[" 、"/"、"+"、"-" 开头语句前面都加上一个分号

9K60

JS魔法堂:ASI(自动分号插入机制)和前置分号

回答,让我又一次看到大牛风采,实在佩服万分。但单纯敬佩是不足以回报他如此优秀文字,必须深入理解文字含义和背后原理才不愧呢!   在这之前我们需要先理解ASI(自动分号插入机制)。...,而且必须加分号,否则编译就不通过了。...ASI机制不是说在解析过程中解析器自动把分号添加到代码中,而是说解析器除了分号还会以换行为基础按一定规则作为断句依据,从而保证解析正确性。    首先这些规则是基于两点: 1....因此分不分号纯属个人和团队偏好问题,当然也可以混合使用咯(下面借一下大牛@高原图) ?  ...对于我这种能少敲键盘则少敲,能不用鼠标就不用大懒虫,自然而然加入到“无分号党”怀抱咯,入党前提条件就是记住一下规则来应付No ASI情况: 在以 ([/+- 开头语句前加分号(由于正常写法均不会出现以

1.7K80

JS该写分号嘛? - wuuconixs blog

ASI 在写JS之前,我一直在写Python,习惯了没有分号代码。 刚好,JS为我们提供了 自动分号插入 Automatic Semicolon Insertion!...这让我们在大部分情况下都不用写分号,非常优雅。 然而ASI在某些情况下将产生错误。 ASI发生错误情况 IIFE 立即调用函数表达式 考虑以下代码。...> node 1.js a: 4 b: 3 c: 3 d: 4 js把中间两个swap看成了 [a, b] = [b, a][c, d] = [d, c] 仍然是一个连等,我们需要从右往左看,首先是...这种没有报错隐式错误,真在Leetcode刷题时候 够你Debug半天了2333。 总结 实际上,完全不用为了ASI在一些情况下导致错误而每行都加上一个分号。...对于我目前遇到这两种情况,可以总结一下,如果一行开始是一个(或者[,那么再上一行你需要手动加上一个分号,至于其他情况,完全不用考虑分号~ 还可以参考一下尤大这篇回答 https://www.zhihu.com

1.1K20

node.js要不要加分号

一开始,关于在node.js句末不加分号,我是拒绝。因为有时不加分号会报错。 我觉得node.js在语法层面挺拧巴,要么就像PHP那样严格要求加分号,要么就像python一律不加分号。...而node.js却表现出一副欲拒还迎姿态,让人感觉就是既要拥抱变化,又要抱残守缺。 ?...加不加分号,这是一个问题 直到有一天我了解了加不加分号场景,才终于释然 一言以蔽之:当代码是以 ( [ ` 这些符号开头时,就需要在代码之前加上分号,其他场景都不需要加分号 let msg =....js:3 (function () { ^ TypeError: "加不加分号呢" is not a function at Object....:191:16) at bootstrap_node.js:612:3 正确写法: let msg = '加不加分号呢' ;(function () { console.log('我是一个匿名函数

1.9K20

括号匹配算法JS简单实现

括号匹配算法 (1)(2)(3)(4)(5) 观察上面这组括号,不难发现当 ) 左侧不存在另一个 ) 时(即未发生嵌套时),最靠近它 ( 便是和它所对应括号。...由提供括号位置开始向左遍历字串,当找到第一个 ( 时候,我们便可以断定这个 ( 就是我们要找括号,代码大概长下面这样子: function findL(str, pos) { let...} 但在出现括号嵌套时,事情似乎变得复杂了起来—— ((1))((2))((3)) 最先出现在 ) 左侧 ( ,可能不再是与其对应括号了。...不过,最内层那对括号(即示例中最靠近数字那几对),似乎依然符合我们之前所找到规律。 既然最内层括号依然能够被匹配,似乎也不是无药可救。既然数字能够被跳过,内部嵌套括号也应该可以被跳过才对。...我们通过递归来匹配内部嵌套括号并将其跳过。

5.2K50

使用双括号初始化集合,可别这么干

Double Brace Initialization should not be used 前言 最近在修改sonar问题时,发现有人使用双括号初始化集合,提示可能发生内存泄漏。...:bob Thread name: Finalizer Object: sandy Gc happen 分析 匿名内部类持有外部类对象引用 双括号初始化时,可以直接使用外部类对象成员name。...当然这只是表面,接下来我们从字节码层面看看到底怎么回事。 使用了匿名内部类 双括号初始化方法 非双括号初始化方法 编译后产生文件 可以发现,多了一个内部类:A$1.class。...查看内部类字节码 拥有一个外部类成员变量 通过构造方法传入了外部类对象引用 将外部类对象引用赋值给成员变量 执行我们写put方法 内部类继承于HashMap 发生了内存泄漏 使用非双括号初始化...mapsandy被回收了,而使用双括号初始化mapbob却没有被回收。

79030

cssjshtml js 函数加不加括号区别

结论: 函数只要是要调用它进行执行,都必须加括号。此时,函数()实际上等于函数返回值。...当然,有些没有返回值,但已经执行了函数体内行为,这个是根本,就是说,只要加括号,就代表将会执行函数体代码。...不加括号,都是把函数名称作为函数指针,用于传参,此时不是得到函数结果,因为不会运行函数体代码。它只是传递了函数体所在地址位置,在需要时候好找到函数体去执行。...细解: 所以一般时候我们都是采用是无括号原因。这也是由于括号二义性,因为括号是“函数调用运算符”,相当于在执行这样一个函数,所以产生问题在理解了之后也就理解了。...另外:除了两边不加括号,也可以两边都加括号来实现函数拷贝,而不是执行函数,如果左边无圆括号右边有圆括号,实际就是相当于产生是一个属性而不是一个方法了,在调用时候只用属性名或者函数名,而不需要再用函数调用运算符圆括号

3K10
领券