MySQL InnoDB auto_increment 值增加 2 而不是 1。病毒?
Posted
技术标签:
【中文标题】MySQL InnoDB auto_increment 值增加 2 而不是 1。病毒?【英文标题】:MySQL InnoDB auto_increment value increases by 2 instead of 1. Virus? 【发布时间】:2011-04-05 03:50:02 【问题描述】:有一个 InnoDB 表用于存储自定义构建的 Web 应用程序使用的博客文章的 cmets。
最近我注意到 cmets 的自动递增主键值递增 2 而不是仅 1。
我还注意到,在另一个用于记住最后几个评论者的足迹签名(例如 ip、会话 id、uagent 字符串等)的 mysql 表中,php 会话的名称以“viruskinq”开头,这很奇怪,因为我认为它应该始终是一个类似于 md5 的十六进制字符串。
Google 只为“viruskinq”提供了几个结果,都是土耳其语。有趣的是,大约一年前,该网站被土耳其恶棍破坏。 (我 100% 确定攻击者没有成功,因为我的应用程序中存在任何安全漏洞,因为同一公司托管的其他网站当时也遭到破坏。)
该站点位于使用 Linux 的共享主机上。
您认为服务器本身可能仍然受到这些黑客的影响吗?检查评论的 id 值发现,这种翻倍的现象自今年 5 月以来就存在,但污损发生在差不多一年前。
还有什么其他原因可以解释自动增量值的奇怪行为?应用程序未更改,并且在较旧的 cmets 中,自动递增的主键值是按顺序排列的。
编辑:解决方案摘要
托管公司告诉我,自动增量值翻倍的原因是因为他们使用了主从 MySQL 架构,据他们说这种现象是正常的。
他们还承认,各种黑客不断攻击他们的服务器,“尤其是会话”,他们对此无能为力。
我想我最好开始收拾东西并搬到更好的虚拟主机上。
【问题讨论】:
Google 提到的所有似乎都是昵称 你确定你的数据库中没有空行吗? 除了 autoinc 值之外,该表看起来完全没问题。SELECT @@auto_increment_increment;
告诉你什么?还要检查该变量是否未在运行时在您的应用程序中设置。
Imre L:我得了 2,但我似乎无法更改此值。我要给托管公司的技术支持写一封电子邮件。
【参考方案1】:
我真的,真的怀疑这是一种病毒。仔细检查是否真的是 session ID 以该字符串开头(这确实会引起一些关注)。我猜这是一个孩子,他发现了如何在浏览器中更改 User Agent 字符串,而您看到的结果是完全无害的。
关于增量问题。
首先,检查您的 mySQL 服务器的 auto_increment_increment
设置。也许它被设置为 2 出于某种原因?
其次,如果不是这样,我会查看评论系统在桌子上运行的所有DELETE
操作。识别为垃圾邮件的 cmets 会被删除吗?可以暂时记录删除,还是切换到软删除?
另外,尝试自己创建一些后续的 cmets。是否会出现同样的现象?如果您使用 mySQL 手动添加记录会怎样?
查看插入提交评论的 PHP 代码,确保没有任何东西可能导致这种行为。
尝试将评论系统移至另一台服务器 - 最好是本地服务器,可能是新设置的 - 看看该行为是否仍然存在。
【讨论】:
奇怪的会话 ID 是我的,我使用的是 Windows7 计算机。我用 Linux 检查了它,我得到了一个正常的会话名称。我切换回 Windows7,再次收到一个正常的会话名称。我再也没有遇到那个“viruskinq”这个名字了。 PHP session id不是服务器单独生成的吗? 谢天谢地,这是一个低调的网站,其中 cmets 并不常见。我做了几个测试cmet,自动增量值每次增加2。 @Wabbit 你 1000% 确定这是 会话 ID 吗?没有与用户代理字符串混淆? 是的,我确定。我有一个用于防洪的表,用于存储评论者的会话 ID 值。它与 UA 无关,正如我所提到的,我得到了这个奇怪的值,它不是由某个聪明的孩子生成的。我告诉你:这很奇怪! :D【参考方案2】:会不会只是表格的自增值设置为2?
见:MySQL autoincrement column jumps by 10- why?
【讨论】:
我的值是 X,但我的测试评论收到的值是 X+1。以上是关于MySQL InnoDB auto_increment 值增加 2 而不是 1。病毒?的主要内容,如果未能解决你的问题,请参考以下文章