我为客户的网站构建了一个自定义主题, 并且该主题不断被黑客入侵。我发现每个主题文件和插件的顶部都有一堆乱码。它们都是超级压缩的, 而且不太容易阅读, 但是看起来就像一堆数字。它不会在网站本身上输出任何内容。我知道它正在发生的唯一原因是因为向插件添加代码会破坏插件, 而WP会自动禁用它。这已经发生了5到6次。
在第二次之后, 我意识到默认设置无法解决问题。因此, 我安装了WordFence, 并在一个月内完美运行。 WordFence开始描绘在任何给定时刻试图对站点进行多少次攻击的情况。太疯狂了我还更改了所有密码(用户, FTP等), 更改了表前缀, 阻止了wp-admin并使用了不同的URL来访问破折号, 并且在Harding WordPress文章中几乎跟踪了每一项。在这里也听了一些帖子的建议。
虽然看起来一无所有。经过一个月的成功, 该插件和我的措施停止了工作。无用的字符串开始出现在主题文件的顶部。但奇怪的是, 没有插件文件。我清除了所有内容并尝试使用iThemes安全套件而不是WordFence。不!醒来后发现该网站再次遭到黑客入侵。
除上述内容外, 我还缩小了插件列表的范围, 以选择值得信任的少数几个在其他站点上证明无害的插件:强大和高级自定义字段。我担心自己以某种方式弄乱了主题, 但是我编码了大约十二个, 而在任何这些站点上都从未遇到过此问题。
我不知所措。我觉得如果我了解”
hack”
的功能, 我将能够更好地应对它, 但是我很茫然。这些东西很难用谷歌搜索。任何指导将不胜感激。
这是注入代码的链接
#1我曾经在服务器中发现此问题, 最后我制作了一个bash脚本, 寻找该代码, 仅从每个受感染的PHP文件中删除了顶行。它解决了问题。
我放在这里是为了让你可以使用它来摆脱恶意代码, 但请记住尝试查找服务器被黑客攻击的方式, 以免再次遭到黑客攻击。
在bash shell中使用非常简单:
测试是否有被感染的文件
./remove_malware.sh /var/www/wp_path/
清除受感染的文件
./remove_malware.sh /var/www/wp_path/ clean
脚本(remove_malware.sh):
#!/bin/bash
#
# This script remove malware of PHP files.
#
# In this case it will remove some malicious code
# from all WordPress PHP files that is at top of
#every PHP file.
#
# The string at the top of every file is:
#
# <
?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54"]);
if ((! strstr($ua, "\x6d\163\x69\145")) and (! strstr($ua, "\x72\166\x3a\61\x31"))) $GLOBALS["\x61\156\x$
#
# This script tries to find the string inside $_SERVER
# of the above line at the top of the files to determine
# if the file is infected. If you run the script and
# nothing seems to be infected but you suspect and you
# want to be sure, just open any PHP of WordPress and
# check if the malicious line code is present. If is
# present but the script did not detect, it is because
# the content inside $_SERVER may be diferent.
# In these cases, just replace in this script the string
# in the -e parameter of grep line with the content of
# $_SERVER found in your PHP (remember to escape
# the \ with \\\\) and run again this removal script.
#
#
# JavocSoft 2014
#if [[ -z "$1" ]];
then
echo "Directory where to find is required."
else
grep -rnwl $1 --include \*.php -e "\\\\x48\\\\124\\\\x54\\\\120\\\\x5f\\\\125\\\\x53\\\\105\\\\x52\\\\137\\\\x41\\\\107\\\\x45\\\\116\\\\x54" | while read -r filename ;
doif [[ ! -z "$2" ]];
then
echo "Found file $filename. Cleaning..."
awk 'BEGIN {matches=0} matches <
1 &
&
/1/ { sub(/^.*<
?php/, "<
?php");
matches++ } { print $0 }' $filename >
$filename.purged
mv $filename $filename.bck
mv $filename.purged $filename
else
echo "Found file $filename."
fidone
echo "Done."
fi
#2缩小其范围的一种方法是从你的pastebin中获取print_r(我相信其hex_values):
$ _SERVER [” \ x48 \ 124 \ x54 \ 120 \ x5f \ 125 \ x53 \ 105 \ x52 \ 137 \ x41 \ 107 \ x45 \ 116 \ x54″ ]
print_r(\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54);
输出如下:
$_SERVER["HTTP_USER_AGENT"];
该代码的一小部分记录在官方手册中:
‘ HTTP_USER_AGENT’ 用户代理的内容:当前请求中的标头(如果有)。这是一个字符串, 表示正在访问页面的用户代理。一个典型的例子是:Mozilla / 4.5 [en](X11; U; Linux 2.2.9 i586)。除其他外, 你可以将此值与get_browser()结合使用, 以根据用户代理的功能来调整页面的输出。遍历整个代码将花费一些时间, 因为某些” 乱码” 已嵌入其他功能中。
【在我的WordPress主题文件中不断发现注入垃圾的PHP】有点警告, 我既不是安全专家, 也不是php向导, 在测试任何代码时, 请尝试在线使用沙箱, 例如http://sandbox.onlinephpfunctions.com/
推荐阅读
- javascript accordion / CSS无法正常工作
- 在WordPress中,如何将自定义帖子类型的默认管理排序顺序设置为自定义列()
- 在首页的每第7个帖子和类别WordPress页面之间插入广告
- 在我的WordPress主题中,如何为博客页面添加分页()
- 在WordPress中包含Fullpage.js(或在一般情况下为JS)
- 迁移wordpress后图像未显示
- Flutter(GridPaper 示例#yyds干货盘点#)
- Go 中实现用户的每日限额(比如一天只能领三次福利)
- String 既然能做性能调优,我直呼内行