【发布时间】:2012-03-07 23:43:54
【问题描述】:
我的网络服务器被黑了(尽管安全团队告诉我没有受到任何损害)并且无数文件有一行额外的 PHP 代码生成指向某个越南网站的链接。
鉴于我的服务器上有数以万计的文件,有没有一种方法可以让我使用 SSH 并从找到的每个文件中删除该行代码?
请在您的回答中具体说明,我只为一些非常基本的任务使用过几次 SSH,并且不想最终删除我的一堆文件!
【问题讨论】:
我的网络服务器被黑了(尽管安全团队告诉我没有受到任何损害)并且无数文件有一行额外的 PHP 代码生成指向某个越南网站的链接。
鉴于我的服务器上有数以万计的文件,有没有一种方法可以让我使用 SSH 并从找到的每个文件中删除该行代码?
请在您的回答中具体说明,我只为一些非常基本的任务使用过几次 SSH,并且不想最终删除我的一堆文件!
【问题讨论】:
是的,几行 shell 脚本就可以了。不过,我犹豫着把它给你,好像出了什么问题,我会因为弄乱你的网络服务器而受到指责。也就是说,解决方案可能很简单:
for i in `find /where/ever -name '*.php'`; do
mv $i $i.bak
grep -v "http://vietnamese.web.site" $i.bak >> $i
done
这会找到/where/ever 下的所有*php 文件,并删除其中包含http://vietnamese.web.site 的所有行。它为每个文件创建一个*.bak 副本。在你运行这个并且一切看起来都很好之后,你可以删除备份
find . -name '*.php.bak' -exec rm \{\} \;
您的下一个任务是寻找新的提供商,因为他们不仅被黑了,而且显然没有备份。祝你好运。
【讨论】:
find 查找所有*.htm 以及所有*.php 文件,那么您可以使用find /where/ever -name '*.php' -or -name '*.htm' 之类的谓词。 URL 只是一个示例,请使用您能想到的任何唯一字符串来标识您需要删除的行。
首先创建一个匹配错误代码(并且仅匹配错误代码)的正则表达式,然后运行
find /path/to/webroot -name \*.php -exec echo sed -i -e 's/your-regex-here//' {} \;
如果一切正常,请删除echo
【讨论】:
我按照以下方式进行。例如。删除匹配特定名称或扩展名的文件。
rm -rf * cron.php。 *
rm -rf * match_string *
其中 match_string 将是任何字符串。确保 * 和字符串名称之间没有空格。
【讨论】:
rm -f cron.php.*
删除此文件夹中名为 cron.php.[whereveryouwant]
的所有文件【讨论】: