jquery 1.7.1源码41行处:
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/
我知道,^(?:[^#<]*(<[\w\W]+>)[^>]*$用来匹配标签;#([\w\-]*)$用来匹配ID。但是,前者中的[^#<]...[^>]该如何理解?
我知道它的作用是用来防止location.hash的XSS攻击,但是对其具体实现原理还是没有理解透彻,希望大神能够指导指导!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
自问自答:
[^#<]...[^>]是用来排除像#<tagName ...>这种情况。jquery 1.6.3以下版本,quickExpr没有#,有可能被攻击中利用进行XSS攻击,例如:将地址栏中的hash修改为#<img src='/' oneerror=(function(){//恶意代码}())。如果代码中有
$(location.hash)这种写法,就会触发恶意代码。