如何理解jquery 源码中用于匹配标签、ID的正则表达式?


jquery 1.7.1 源码41行处:


 quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/

我知道, ^(?:[^#<]*(<[\w\W]+>)[^>]*$ 用来匹配标签; #([\w\-]*)$ 用来匹配ID。但是,前者中的 [^#<]...[^>] 该如何理解?
我知道它的作用是用来防止 location.hash 的XSS攻击,但是对其具体实现原理还是没有理解透彻,希望大神能够指导指导!

jquery 正则表达式 javascript正则 JavaScript

路过的童鞋 9 years, 10 months ago

自问自答: [^#<]...[^>] 是用来排除像 #<tagName ...> 这种情况。jquery 1.6.3以下版本, quickExpr 没有 # ,有可能被攻击中利用进行XSS攻击,例如:将地址栏中的hash修改为
#<img src='/' oneerror=(function(){//恶意代码}())
如果代码中有 $(location.hash) 这种写法,就会触发恶意代码。

Kaede_君 answered 9 years, 10 months ago

Your Answer