PHP中preg_replace函数如何实现复杂模式替换的详细解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计967个文字,预计阅读时间需要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自身在解析请求的时候,如果参数名字中包含空格、.、[等字符,会将他们转换成_。
本文共计967个文字,预计阅读时间需要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自身在解析请求的时候,如果参数名字中包含空格、.、[等字符,会将他们转换成_。

