【发布时间】:2016-05-29 13:53:37
【问题描述】:
我决定在几个我看到攻击的基于 PHP 的网站上安装 ZB Block。所有网站都在 Ubuntu 14.04 LTS / Apache 2.4 / PHP 5.5.9 上运行
ZB Block 脚本调用需要插入到每个 .php 文件的开头。为了在多个网站上的所有 .php 文件中自动进行字符串替换,我做了一个 sed 语句来在第一次出现
sed '#s:<?php:<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php#’ First-Occurence-Replacement-Sample.php > First-Occurence-Replacement-Sample.tmp && mv First-Occurence-Replacement-Sample.tmp First-Occurence-Replacement-Sample-NEW.php
运行 sed 语句得到以下结果:
制作了 1 个名为 First-Occurence-Replacement-Sample-NEW.php 的文件,GOOD
2 未进行所需的字符串替换。不好
# ls -l
-rw-r--r-- 1 root root 39 Feb 17 15:40 First-Occurence-Replacement-Sample-NEW.php
-rw-r--r-- 1 root root 39 Feb 17 15:13 First-Occurence-Replacement-Sample.php
# nano First-Occurence-Replacement-Sample-NEW.php
Line 1 <?php <<< string wasn’t replaced as desired.
Line 2 /***************************************************************************
Line 3 <?php <<< This second occurrence should never be replaced
Line 4 ?> ?>
所需的 sed 语句行为
字符串替换前的示例文件
Line 1 <?php
Line 2 /***************************************************************************
Line 3 <?php
Line 4 ?>
字符串替换后的示例文件
Line 1 <?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php
Line 2 /***************************************************************************
Line 3 <?php <<< This second occurrence should never be replaced
Line 4 ?> ?>
需要如何更改 sed 语句才能实现所需的替换?
在我得到帮助让这个 sed 语句正常工作后,我想把它放在一个脚本中,以便在一个充满 .php 文件的整个目录上运行替换,如下所示:
创建脚本文件: # nano zbblock-string-insertion.bash
#! /bin/bash
for f in *.php
do
echo "Converting $f"
sed '#s:<?php:<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php#’ $f > $f.tmp && mv $f.tmp $f
done
保存文件 zbblock-string-insertion.bash ,使其可执行,然后运行它!
肯纳沃兹, 它有效,谢谢!你是个天才!不要让你的姻亲告诉你有什么不同。
要递归目录,请将 Kenavox 提供的命令行修改为:
find -name '*.php' -type f -exec sed -I.........
现在。该命令执行递归替换。
【问题讨论】:
-
没有多大意义。最好使用 php.ini 或使用 auto_prepend_file。但通常我推荐替代方案,因为 ZB Block 不再积极开发,不支持 IPv6 并且有许多过时(和错误)的签名。
-
感谢您的提示。您推荐/使用哪种第三方解决方案?
-
我目前在 100 多个网站上使用来自 nintechnet.com 的 NinjaFirewall。很快就会有一个新版本,它要好得多,当前版本仍然非常强大、快速、可靠且易于维护。我还使用文件监控解决方案、CIDR 阻止列表和其他东西,所有链接在websectools.com phpMussel 和 IDRAM 是由也是 SpambotSecurity 论坛成员的 Maikuolan (Caleb) 创建的。 CIDRAM、垃圾推荐黑名单和 NinjaFirewall 是 ZB Block 的完整且安全的替代品。
-
我会调查一下。谢谢。