jquery 1.7.1
源码41行处:
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/
我知道,^(?:[^#<]*(<[\w\W]+>)[^>]*$
用来匹配标签;#([\w\-]*)$
用来匹配ID。但是,前者中的[^#<]...[^>]
该如何理解?
我知道它的作用是用来防止location.hash
的XSS攻击,但是对其具体实现原理还是没有理解透彻,希望大神能够指导指导!
jquery 1.7.1
源码41行处:
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/
我知道,^(?:[^#<]*(<[\w\W]+>)[^>]*$
用来匹配标签;#([\w\-]*)$
用来匹配ID。但是,前者中的[^#<]...[^>]
该如何理解?
我知道它的作用是用来防止location.hash
的XSS攻击,但是对其具体实现原理还是没有理解透彻,希望大神能够指导指导!
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
自问自答:
[^#<]...[^>]
是用来排除像#<tagName ...>
这种情况。jquery 1.6.3以下版本,quickExpr
没有#
,有可能被攻击中利用进行XSS攻击,例如:将地址栏中的hash修改为#<img src='/' oneerror=(function(){//恶意代码}())
。如果代码中有
$(location.hash)
这种写法,就会触发恶意代码。