需要清理垃圾邮件数据库

时间:2013-01-11 02:40:57

标签: php mysql database

所以有几件事情。首先,生病了,我似乎无法专注于正确地解决这个问题,其次,它让我难以理解如何解决这个问题。

所以我有一个客户端有一个基于旧代码的旧网站。代码中存在一些极端漏洞,允许注入和攻击 - 这种情况发生了。自从我参与这个项目以来,我已经收紧了很多东西并且没有真正的问题。但我刚刚发现了一些似乎是以前黑客攻击的问题。

因此,在数据库中,他们有一个名为“copy”的字段,用于存储文章的内容。好的,不是最好的名字,但它就在那里。所以这就是问题所在。自从hack以来,有大约52k行,其中包含“viagra”一词。因此,当我仔细查看复制字段和视图源代码时,我就会发现:

for the little kids in the neighborhood.<div style="display: none;">

基本上是打开和关闭的div标签,其样式设置如上所示。因此,它不会在页面上进行直观呈现,但是当您查看源或“搜索引擎蜘蛛”时,他们会看到它。我无法弄清楚为什么上传到article_image目录的.php文件在网站管理员工具中被编入索引 - 直到今晚。现在我知道为什么了。

所以这就是我需要的。因为数据库中的每一行(其中52k)都有作为示例给出的内容(<div style...>)部分,并且它们都出现在最初的内容之后,我需要一些可以添加到循环中的内容将清理复制字段中的垃圾,以便清理混乱。我可以采用str_replace方法 - 但这太长了,不能保证我会得到所有的东西。

那么 - 有什么建议吗?

1 个答案:

答案 0 :(得分:5)

试试这个:(假设“content”是包含文章内容的列的名称)

UPDATE `copy` SET `content`=
     SUBSTR(`content` FROM 1 FOR LOCATE('<div style="display: none;">',`content`))
     WHERE `content` LIKE '%<div style="display: none;">%';

由于您已经指出这些注射始终是文章中的最后一件事,因此这将很好地消除它们。我强烈建议先备份一份备份副本!