haozi.me学习记录


正则表达式

横向模糊匹配
  • {m,n},最少出现m次最多出现n次

  • /ab{2,5}c/g,表示匹配第一个字符是a,第二位开始2-5个字符是b,最后一个字符是c,g是全局匹配,不仅匹配第一个
    
纵向模糊匹配
  • [abc],可以匹配abc中的任何一个

  • /a[123]b/,可以匹配a1b,a2b,a3b

范围表示法
  • [123456abcdefABCDEF]可以写作[1-6a-fA-F]
反义字符组
  • [^abc],除abc之外的任意字符
常见的简写形式
  • \d,[0-9],匹配一位数字

  • \D,[^0-9],除数字外的字符

  • \w,[0-9a-zA-Z_],数字大小写字母和下划线

  • \W,[^0-9a-zA-Z_],除数字大小写字母和下划线之外
    
  • \s,[\t\v\n\r\f],表述空白符号,空格,水平制表符,垂直制表符,换行符,回车符,换页符

  • \S,非空白符

量词
  • {m,},最少出现m次
  • {m},{m,m}出现m次
  • ?,{0,1},出现0次或一次
  • +,{1,}出现一次或更多次
  • *,出现任意次,零次或更多次
贪婪匹配和惰性匹配
  • /\d{2,5}/,表示数字连续出现2-5次
  • /\d{2,5}?/,在量词后面加?,实现惰性匹配,匹配到出现2次就不匹配了
多选分支
  • (p1|p2|p3),支持子模式中任选其一进行匹配
  • 分支结构也是惰性匹配
实例
  • /^(\d{15}|\d{17}[\dxX])$/\
    

    \d{15}和\d{17}[\dxX]

    \d{15},连续15位数字

    \d{17}[\dxX],连续17位数字,最后一位可以是数字也可以是大小写的

  • 优先级

    1.转义符 \
    2.括号和方括号 (...)、(?:...)、(?=...)、(?!...)、[...]
    3.量词限定符 {m}、{m,n}、{m,}、?、*、+
    4.位置和序列 ^ 、$、 \元字符、 一般字符
    \5. 管道符(竖杠)|
    

xss

0x00
  1. function render (input) {
      return '
    ' + input + '
    ' }
  2. 成功img

img标签:向网页中嵌入一幅图像,从网页上链接图像

scr属性:她的值是图像的url值

onerror事件:在加载外部文件(文档,图像)发送错误时触发

0x01
  1. function render (input) {
      return ''  
    }
    
          
    
  2.  # 闭合标签
    

0x02
  1. function render (input) {
      return ''  
    }
    
    "> 
    ">
    

0x03
  1. function render (input) {
      const stripBracketsRe = /[()]/g  代表全局匹配
      input = input.replace(stripBracketsRe, '')   <--过滤括号,g代表全局匹配-->
      return input
    }
    
  2. # 反撇号绕过
    

0x04
  1. function render (input) {
      const stripBracketsRe = /[()`]/g   <--过滤了括号和反撇号-->
      input = input.replace(stripBracketsRe, '')
      return input
    }
    
  2.  # 编码绕过
    

  3. 元素中-->
     	 	
    
  4. iframe标签

    iframe元素会创建包含另一个文档的内联框架

    srcdoc属性:srcdoc中的代码会作为iframe中的内容显示出来,srcdoc中可以直接写转移后的html片段