开发者社区> 问答> 正文

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

jquery 1.7.1源码41行处:

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

展开
收起
小旋风柴进 2016-03-26 11:23:31 2000 0
1 条回答
写回答
取消 提交回答
  • 1...2是用来排除像#<tagName ...>这种情况。jquery 1.6.3以下版本,quickExpr没有#,有可能被攻击中利用进行XSS攻击,例如:将地址栏中的hash修改为
    #<img src='/' oneerror=(function(){//恶意代码}())。
    如果代码中有$(location.hash)这种写法,就会触发恶意代码。


    1. #<
    2. >
    2019-07-17 19:15:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
编程语言如何演化—— 以 JS 的 private 为例 立即下载
编程语言如何演化-以JS的private为例 立即下载
低代码开发师(初级)实战教程 立即下载