preg_match异或绕过
时间: 2023-07-23 13:39:24 浏览: 201
preg_match 函数是 PHP 中用于进行正则表达式匹配的函数。在某些情况下,我们可能需要绕过某些限制或过滤,这时可以使用异或运算符(^)来绕过。
例如,有时候我们需要匹配一个字符串中的数字,但是字符串中可能包含一些其他字符,如果直接使用 preg_match 可能会匹配到其他字符导致匹配失败。这时可以使用异或运算符来过滤掉不需要的字符:
```
$str = "123abc456";
if (preg_match("/^[0-9^a-z]+$/", $str)) {
echo "Match!";
} else {
echo "Not match!";
}
```
上述代码中,正则表达式 `/^[0-9^a-z]+$/` 使用了异或运算符,表示匹配数字或不是小写字母的字符。这样就可以过滤掉字符串中的字母,只匹配数字。
需要注意的是,使用异或运算符绕过限制或过滤并不是一个安全的做法,因为正则表达式的匹配规则是公开的,攻击者也可以使用同样的方法绕过限制。建议在实际开发中尽量避免使用此方法。
相关问题
preg_match绕过
preg_match函数是PHP中用于执行正则表达式匹配的函数。在CTF比赛中,可能会遇到一些安全控制中使用了正则表达式检查输入的情况。为了绕过这种检查,可以尝试以下方法:
1. 绕过正则表达式匹配的特殊字符:在正则表达式中,有一些特殊字符如$、^、*、+等,如果直接输入这些字符,很可能会被正则表达式匹配函数检测出来。可以使用反斜杠\对这些特殊字符进行转义,绕过检测。例如,要匹配字符串$abc,可以使用正则表达式/\$abc/。
2. 绕过正则表达式中使用的黑名单:有时候,安全控制会设置一个正则表达式的黑名单,例如禁止出现' or ''='等关键词。可以使用一些技巧来绕过这种检测,例如使用大小写混合、使用空格、使用HTML实体等。例如,要匹配字符串' or ''=',可以使用正则表达式/'[\s]*oR[\s]*'='[\s]*'/i,其中[\s]*表示0个或多个空格,i表示大小写不敏感。
3. 利用正则表达式的漏洞:有时候,正则表达式本身可能存在一些漏洞,可以利用这些漏洞来绕过安全控制。例如,正则表达式中的量词可能会导致性能问题,可以尝试使用非贪婪量词来绕过匹配。例如,要匹配字符串abc,可以使用正则表达式/a.*?c/,其中.*?表示非贪婪匹配任意字符。
4. 绕过正则表达式的限制:有时候,正则表达式的长度限制或者复杂度限制可能会导致无法匹配某些字符串。可以尝试使用一些技巧来绕过这种限制,例如将正则表达式拆分成多个部分、使用递归匹配等。
preg_match绕过字符+
在正则表达式中,字符+是一个特殊字符,表示匹配前一个字符的1次或多次出现。在一些情况下,安全控制可能会使用正则表达式来匹配输入中是否包含了字符+,从而防止一些攻击,如SQL注入等。
要绕过这种正则表达式的检测,可以使用一些技巧:
1. 使用字符集:在正则表达式中,方括号[]表示一个字符集,可以匹配其中任意一个字符。因此,可以使用字符集来绕过字符+的检测。例如,要匹配字符串a+b,可以使用正则表达式/a[b]{1}c/,其中[b]{1}表示匹配字符b的1次出现。
2. 使用转义符:在正则表达式中,反斜杠\可以用来转义特殊字符,从而禁止其被解释为正则表达式中的元字符。因此,可以使用反斜杠来绕过字符+的检测。例如,要匹配字符串a+b,可以使用正则表达式/a\+b/,其中\+表示匹配字符+的字面意义。
3. 使用量词:在正则表达式中,量词可以用来指定字符出现的次数。因此,可以使用量词来绕过字符+的检测。例如,要匹配字符串a+b,可以使用正则表达式/a.{1,}b/,其中.{1,}表示匹配任意字符的1次或多次出现。
需要注意的是,以上方法只是一些常见的绕过技巧,具体情况需要根据实际情况进行分析和选择合适的方法。另外,绕过正则表达式的检测并不是一种可靠的安全控制方法,最好使用其他安全控制方法来防止攻击。
阅读全文