preg_match过滤URL

<?php
//从URL中获取主机名称
preg_match('@^(?:http://)?([^/]+)@i',
    "http://www.php.net/index.html", $matches);
$host = $matches[1];

//获取主机名称的后面两部分
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>

要绕过这段PHP代码中的正则表达式过滤,可以考虑以下几点: 1. **理解正则表达式**:正则表达式`/.+?nn0nkey/is`的意思是匹配任何包含`nn0nkey`的字符串,`i`表示不区分大小写,`s`表示单行模式。 2. **构造绕过字符串**:我们需要构造一个字符串,使其不包含`nn0nkey`,但仍然能够通过正则表达式的匹配。 以下是一些可能的绕过方法: ### 方法一:使用Unicode编码 可以通过Unicode编码来绕过正则表达式的匹配。例如: ```php $str = "nn0\x6ekey"; // \x6e 是字符 'n' 的十六进制编码 if(preg_match('/.+?nn0nkey/is', $str)){ die("应该怎么绕过呢???"); } ``` 这种方法是绕过不严格的正则表达式匹配。 ### 方法二:使用不同的编码 可以通过不同的编码方式来绕过正则表达式的匹配。例如: ```php $str = "nn0n%6bey"; // %6b 是字符 'k' 的URL编码 if(preg_match('/.+?nn0nkey/is', $str)){ die("应该怎么绕过呢???"); } ``` 这种方法是绕过不严格的正则表达式匹配。 ### 方法三:使用多字节字符 可以通过多字节字符来绕过正则表达式的匹配。例如: ```php $str = "nn0n" . chr(0x6b) . "ey"; // chr(0x6b) 是字符 'k' if(preg_match('/.+?nn0nkey/is', $str)){ die("应该怎么绕过呢???"); } ``` 这种方法是绕过不严格的正则表达式匹配。 ### 方法四:使用字符串拼接 可以通过字符串拼接来绕过正则表达式的匹配。例如: ```php $str = "nn0n" . "k" . "ey"; if(preg_match('/.+?nn0nkey/is', $str)){ die("应该怎么绕过呢???"); } ``` 这种方法是绕过不严格的正则表达式匹配。 ### 方法五:使用注释 可以通过注释来绕过正则表达式的匹配。例如: ```php $str = "nn0n" . "/*" . "key"; if(preg_match('/.+?nn0nkey/is', $str)){ die("应该怎么绕过呢???"); } ``` 这种方法是绕过不严格的正则表达式匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值