【问题标题】:My way around sql injection我的 sql 注入方式
【发布时间】:2014-03-17 17:43:12
【问题描述】:

我不是专家,但我确实有一个网络前端处理订单,这些订单需要输入数据以供进一步登录。我没有使用该数据库,而是创建了另一个带有名为 status 的额外列的数据库。最初在处理订单时,它们被设置为 0。cron 作业每 3 分钟运行一次,为所有状态为 0 的用户轮询此数据库。运行时,cron 将所有当前处理的用户的状态设置为状态 1(因此,如果有任何在脚本运行期间获得输入的,都将在下一次处理,只需 3 分钟)。

在所有新用户的状态设置为 1 后,仅将密码和电子邮件字段转储到一个文件中,然后通过“LOAD DATA INFILE”加载回用户需要使用其客户端登录的真实数据库。没有网络登录表单。它适用于电子邮件,只需使用 IMAP 客户端。但是,我确实为 cron 使用 root 帐户,因为我意识到我需要将所有 privs 授予用户以转储数据,如果是这样,我不妨先使用 root 更新状态列,然后将新数据转储到文件中,然后将其加载到新数据库中并返回并删除所有状态为 1 的用户。这是一个从命令行运行 mysql 的简单 4 行脚本。

这是一个安全的赌注,还是我冒着每 3 分钟运行一次 root cron 的风险?我不明白我怎么可能有问题,因为我从不使用 root 来处理网络内容。我使用一个单独的 mysql 用户,只有 INSERT privs 用于 web 前端来处理新订单。有cmets吗?我觉得这样我可以避免 sql 注入,即使我的 mysql 用户仍然有有限的权限,但总有一些我不知道的事情。

【问题讨论】:

  • SQL注入与root用户无关
  • SQL注入需要以SQL开头。我猜LOAD DATA INFILE 符合条件,但您还没有展示如何使用它。如果您将原始输入注入查询中,您将很容易受到攻击。如果你不这样做,你就不是。就这么简单。

标签: mysql sql linux sql-injection


【解决方案1】:

这是一个安全的赌注还是我在冒险

只要是简单的 LOAD DATA INFILE 查询 - 不。然而,

我没有使用该数据库,而是创建了另一个数据库,其中包含一个名为 status 的额外列。

  1. 这样的飞行马戏团完全没有必要。
  2. 无论如何,它并不能保护您免受注射。

相反,您必须对应用程序中的所有查询使用prepared statements

【讨论】:

  • 好的。转储只是从包含新用户的新数据库中转储两个字段。只是密码和电子邮件字段。然后将其加载到我的真实数据库中。然后第一个数据库被清除所有状态为 1 的用户,以便下一个 cron 处理状态为 0 的用户。我认为拥有这个新数据库除了新创建的用户之外没有任何真实数据会阻止任何人能够访问或篡改我的真实数据库。现在不是这样吗?
  • 感谢您的链接。我现在有很多阅读和学习要做!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 2022-07-13
  • 2010-10-12
  • 2012-05-27
相关资源
最近更新 更多