【问题标题】:PHP preg_match all content between 2 variablesPHP preg_match 2个变量之间的所有内容
【发布时间】:2014-05-02 08:17:04
【问题描述】:

我手上有一个被黑的网站,并且所有代码都注入了内容。 每个注入的内容块都在 hastags (#) 之间以变量开头和结束。

我的问题是;我会使用什么样的 preg_match / preg_replace 语法来查找 2 个变量之间的内容?

总是这样:

#4k4j3k#

all-sorts-of-php-code

#/4k4j3k#

请注意,主题标签之间的代码总是不同的。 主题标签始终存在。结束标签与开始标签相同(除 / )。

提前致谢!

【问题讨论】:

  • 不要依赖正则表达式来清理被黑网站。你错过某些东西的机会太大了。从备份中恢复文件或在必要时重新安装它们。
  • 您不需要在简单的情况下使用正则表达式。请参阅此处了解解决方案:stackoverflow.com/questions/23389762/…
  • @Gerald Schneider,确实如此。但不是我的服务器,不是我的网站,没有备份,仍然想帮助别人:) 最后,这看起来也不错。但它想要搜索静态值。我在标签之间有可变数字。

标签: php preg-replace preg-match


【解决方案1】:

首先,我不知道您要做什么。 尝试修复该网站上的安全漏洞。以下正则表达式仅用于说明目的。

将此正则表达式与s 模式修饰符一起使用以匹配新行内容。

preg_match_all('/\#4k4j3k#(.*?)\#\/4k4j3k#/s', $text, $matches);
print_r($matches[1]);

Demonstration

【讨论】:

  • 是的,这可以解决这个特定版本的问题。但是有数百个,在主题标签之间都有不同的变量。我当然想一次找到/清除它们:)
  • 不,为什么要修改受感染的文件?只需清除它们并在那里复制新版本的文件即可。在此之前更改您的 SFTP/FTP 登录信息。
  • 我没有确切的数字,但可能是 3.500 个注入文件...您是建议我单独清除它们吗? ;)
  • 我没有说手动,你也可以自动完成,对吧?我建议不要修改注入的 3500 个文件,而是清除并上传较新版本的文件。
【解决方案2】:

试一试:

$content = preg_replace('~#([^#]+)#.*?#/\1#~', '', $content);

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多