【发布时间】: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