PHP的preg_replace函数如何实现复杂模式匹配,能否详细解释一下?
- 内容介绍
- 文章标签
- 相关推荐
本文共计972个文字,预计阅读时间需要4分钟。
0x01 + 起因 + 事件的起因是下午遇到了 preg_replace 函数,我们都知晓 preg_replace 函数可能会引发命令执行。目前我们面临一些情况。
0x02 + 经过 + 测试发现1:测试代码大致如下:foreach ($GET as $re)
0x01 起因
事情的起因是下午遇到了 preg_replace 函数,我们都知道 preg_replace 函数可能会导致命令执行。现在我们来一些情况。
0x02 经过
踩坑1:
测试代码大概是这样的:
foreach ($_GET as $regex => $value) { preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value); }
测试过程中发现通过浏览器的方式传入数据的时候,会将 . + 等特殊字符转换为 _ 。
这里涉及到了php的一个特性
php自身在解析请求的时候,如果参数名字中包含空格、.、[等字符,会将他们转换成_。
本文共计972个文字,预计阅读时间需要4分钟。
0x01 + 起因 + 事件的起因是下午遇到了 preg_replace 函数,我们都知晓 preg_replace 函数可能会引发命令执行。目前我们面临一些情况。
0x02 + 经过 + 测试发现1:测试代码大致如下:foreach ($GET as $re)
0x01 起因
事情的起因是下午遇到了 preg_replace 函数,我们都知道 preg_replace 函数可能会导致命令执行。现在我们来一些情况。
0x02 经过
踩坑1:
测试代码大概是这样的:
foreach ($_GET as $regex => $value) { preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value); }
测试过程中发现通过浏览器的方式传入数据的时候,会将 . + 等特殊字符转换为 _ 。
这里涉及到了php的一个特性
php自身在解析请求的时候,如果参数名字中包含空格、.、[等字符,会将他们转换成_。

