【问题标题】:SQL injection when client is only selecting客户端仅选择时的 SQL 注入
【发布时间】:2017-04-16 00:04:20
【问题描述】:

根据this question,SQL 注入是必须防止的。在用户只从数据库中选择的应用程序中,这会是一个问题吗?

【问题讨论】:

  • 是的,是的。
  • 是的。这是一个问题。
  • @JohnConde 怎么样?我使用的 MySQL 用户只有 SELECT 访问权限,并且代码本身只运行 SELECT 函数。
  • 如果你可以选择你仍然可以从数据库中获取敏感数据。
  • @LouisLoudogTrottier 我只关心他们编辑数据库;没有我知道的敏感信息。

标签: php mysql sql security sql-injection


【解决方案1】:

以下是一些 SQL 注入可能允许的问题示例,即使用户被限制为 SELECT 权限:

  • 攻击者可以读取仅供其他用户读取的数据。许多应用程序使用同一个 MySQL 用户进行连接,然后对应用程序代码实施进一步的数据访问限制。 IE。我只应该看到我创建的购物车。但是通过 SQL 注入,我可以读取每个人的购物车、他们的购买历史、他们的信用卡号等等。

  • 攻击者可以读取其他帐户的哈希密码,破解它们(在他自己的计算机上),然后以更高权限登录另一个用户。

  • 攻击者可以通过运行使用过多资源的 SELECT 查询来运行denial-of-service attack。例如,在 MySQL 上,表 INFORMATION_SCHEMA.CHARACTER_SETS 即使对于具有 no 权限的用户也是可读的。现在当攻击者运行这个查询时会发生什么:

    SELECT * FROM (SELECT * FROM CHARACTER_SETS, CHARACTER_SETS, CHARACTER_SETS,
    CHARACTER_SETS, CHARACTER_SETS, CHARACTER_SETS) AS t ORDER BY 1
    

    它尝试在磁盘上为 2,839,760,855,281 行创建一个临时表。我预计这会耗尽您服务器上的磁盘空间。

您的问题听起来像是在寻找跳过编写防止 SQL 注入的安全代码的理由。

对不起,没有骰子。你需要编写安全的代码。

【讨论】:

    【解决方案2】:

    用户所做的任何会导致对数据源进行 CRUD 操作的事情都应被视为危险,并采取一切预防措施来防止 SQL 注入。

    【讨论】:

    • 为什么?我使用的 MySQL 用户只有 SELECT 访问权限,并且代码本身只运行 SELECT 函数。
    • 因为,SQL注入如何欺骗所谓的用户选择所有数据并将其发送给调用者?
    猜你喜欢
    • 2019-02-03
    • 2019-11-04
    • 1970-01-01
    • 2019-11-18
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 2012-01-02
    相关资源
    最近更新 更多