有人在我的数据库中删除了一个表。如何? [复制]

Posted

技术标签:

【中文标题】有人在我的数据库中删除了一个表。如何? [复制]【英文标题】:Someone has dropped a table in my database. How? [duplicate] 【发布时间】:2013-11-30 10:35:43 【问题描述】:

在我的 php 脚本中,所有输入都用 mysqli_real_escape_string 以这种方式“过滤”:

$categoryid = mysqli_real_escape_string($link, $_GET['id']); 

$query = "SELECT categories.id AS cid, categories.title AS ctitle
              FROM categories
              WHERE cid=".$categoryid.";";

$rows = mysqli_query($link, $query);
$row = mysqli_fetch_array($rows);

有人可以告诉我,他是如何入侵我的数据库并删除“category_post”表的?

register_globals 已禁用

【问题讨论】:

谁知道-这里只有一个小sn-p。可能是二级注入攻击成功了,也可能是他通过其他方式获得了访问权限。 This xkcd 专为您创建。 【参考方案1】:

他可能输入了下一个字符串 '1'; ;

如果我没记错的话,这个php函数不会阻止sql注入,它只是确保sql字符串是合法的 和 选择 categories.id 作为 cid,categories.title 作为 ctitle 从类别 哪里 cid='-1'; SQL注入字符串; 是 sql 的合法字符串

【讨论】:

如果我放那个字符串什么都不会发生【参考方案2】:

你有没有采取措施确保sql注入是不可能的?您可以采取一些措施来防止注入,例如在查询之前使用 mysql_real_escape_string() 来转义 post 上的任何引号并获取变量,或者使用带有 mysqli 或 PDO 的准备好的语句而不是使用 mysql_query。另外作为一个额外的保障,您可以创建一个单独的用户来连接到具有有限访问权限的 mysql,并且不允许该用户使用 DROP 等。

【讨论】:

以上是关于有人在我的数据库中删除了一个表。如何? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在phpMyAdmin中显示“编辑”,“复制”和“删除”按钮?

如何限制 MySQL 用户对行执行更新或删除? [复制]

我想在我的表中获取多维数组

删除名称以某个字符串开头的所有表

SQL Server:如何删除行号

Rails DB 迁移 - 如何删除表?