首页 > 解决方案 > 基于 web 的 mySQL 前端查询有风险吗?

问题描述

我打算编写一个解决方案,其中表和命令是固定的,但参数可能会有所不同,即由互联网用户输入。这有多大风险?

到目前为止,只使用了 PHP 代码。

predefined: SELECT
user defined:    select_expr [, select_expr ...]
predefined:    [FROM table_references
WHERE + user defined:    [where_condition]
GROUP BY  + user defined:    {col_name | expr | position}
  [ASC | DESC], ... [WITH ROLLUP]]
[HAVING + user defined where_condition]
[ORDER BY + user defined {col_name | expr | position}
  [ASC | DESC], ...]
[LIMIT + user defined {[offset,] row_count | row_count OFFSET offset}]

如果 PHP 代码仅使用定义了右侧的 mySQL 命令,则该建议应该有效。WHERE 与用户输入“Temp > 10”结合,例如

标签: mysqlrisk-analysis

解决方案


这有多大风险?

非常危险。我可以想到很多方法,这可能会出错:

  1. 信息暴露。用户可以通过多种方式将子句注入到此查询中,从而对您不想要的表执行查询。一种可能性是将子查询注入select_expr子句。另一种方法是JOINwhere_condition.

  2. 拒绝服务。BENCHMARK()最明显的方法是在任何子句中注入一个耗时的函数。如果可以JOIN通过 s 注入 s where_condition,则可以使用一系列昂贵的交叉连接。

不允许用户编写 SQL。


推荐阅读