mysql - 在一次查询中通过所有 mysql 数据库删除子字符串

标签 mysql malware

我有一个问题,因为某种恶意软件已经进入我的网站。我想通过 1 个查询从数据库中删除所有恶意代码。我相信这是可能的。

我无法删除所有行,恶意软件已向每个页面/文章/图库/...标题添加了一些代码。所以我想保留文章的原始标题。我希望这是可能的。

例如:

<script src="...">...</script>About us

我需要将关于我们保留在数据库中。 我怎样才能一次通过所有数据库做到这一点?

最佳答案

您可以使用 string functions做这个。

这是一个演示:

mysql> SET @t = 'See <script src="...">...</script>About us';

mysql> SELECT CONCAT(
  SUBSTRING(@t, 1, LOCATE('<script ', @t)-1), 
  SUBSTRING(@t, LOCATE('</script>', @t)+LENGTH('</script>'))) AS newstring;
+--------------+
| newstring    |
+--------------+
| See About us |
+--------------+

这假设脚本标记在每个字符串中只出现一次。

然后你将不得不使用 UPDATE 来更正数据,一次一列和一个表:

UPDATE MyTable
SET MyStringColumn = CONCAT(
      SUBSTRING(MyStringColumn, 1, LOCATE('<script ', MyStringColumn)-1), 
      SUBSTRING(MyStringColumn, LOCATE('</script>', MyStringColumn)+LENGTH('</script>')));

如果您想同时处理所有表和所有列,另一种解决方案是将数据库转储到文本文件,然后使用文本编辑器进行全局搜索和替换。

$ mysqldump mydatabase > mydatabase.sql

$ vim mydatabase.sql

  :%s/<script src=.*<\/script>//g

$ mysql mydatabase < mydatabase.sql

当然,在转储和恢复之间更改的任何数据都将被覆盖。

如果您无法暂停对数据库的更改,则必须使用 UPDATE 解决方案就地更改数据。

关于mysql - 在一次查询中通过所有 mysql 数据库删除子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49134436/

相关文章:

php - 无法获取mysql数据(CodeIgniter选择)

mysql - 如何改进MySQL中的Limit子句

php - PHP strtotime 的奇怪日期问题

共享主机上的 Linux 恶意软件检测

php - 防止使用包含图像文件的 PHP

mysql - 根据第二个表中输入的值更新 MYSQL 表

php - 如何修复我网站上的 #c3284d# 恶意广告黑客攻击?

javascript - 如何修复报告的攻击页面?

google-drive-api - Google Drive 文件 - 批量管理修订

php - 动态/递归 SQL 排序方式