SQL 客户端仅选择时注入

SQL injection when client is only selecting

根据 this question,SQL 注入是必须要防止的事情。在用户仅从数据库中进行选择的应用程序中,这会成为一个问题吗?

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

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

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

  • 攻击者可以读取其他账户的散列密码,破解(在自己的电脑上),然后以更高的权限登录到另一个用户。

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

    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 行创建临时 table。我预测这会耗尽服务器上的磁盘 space。

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

抱歉,没有骰子。您需要编写安全代码。