PHP的preg_replace函数如何实现复杂模式匹配,能否详细解释一下?

2026-04-02 20:090阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计972个文字,预计阅读时间需要4分钟。

PHP的preg_replace函数如何实现复杂模式匹配,能否详细解释一下?

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分钟。

PHP的preg_replace函数如何实现复杂模式匹配,能否详细解释一下?

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自身在解析请求的时候,如果参数名字中包含空格、.、[等字符,会将他们转换成_。

阅读全文