preg_match绕过简单总结
preg_match绕过
preg_match
PHP手册告诉我们, preg_match 函数的返回值有3种,分别为(安全的写法是使用 === 运算符对返回值进行比较,手册推荐用效率更快的 strpos 函数替代 preg_match 函数):
returns 1; // 如果匹配到.
returns 0; // 如果未匹配到.
returns FALSE; // 发生错误时.
绕过方法
1.数组绕过
原理:
preg_match只能处理字符串,当传入的subject是数组时会返回false
举例:
当输入的为数组时
2.PCRE回溯次数限制
原理:
具体可以参考p牛的博客:
举例:
3.换行符绕过
原理:
举例:
这里如果正则变成了/^.*flag.*$/s
则无效了
- 而在非多行模式下,
$
似乎会忽略在句尾的%0a
- 这里本地没测试成功,不知道是版本问题还是什么,挖坑。回头补上
4.多行匹配
- /m 多行匹配,但是当出现换行符
%0a
的时候,会被当做两行处理,而此时只可以匹配第 1 行,后面的行就会被忽略。- 也没成功 回头补上
参考连接: