1

在一个调查框架中,用户输入(即“询问”调查问题,而不是回答它们)是相当可信的,我的前任几乎直接从用户定义的约束构建一个 MySQL 查询(即没有对恶意的可能性做太多SQL 注入,因为 SQL 注入是预期的结果)。

在大多数情况下,这些约束类似于跳过这个问题,如果sex = 1它会转化为类似的查询

SELECT IF(sex = 1) AS test FROM Survey1 WHERE user_id = 12

在更复杂的情况下,约束可能是
Survey1.agreed = 1 OR (Survey2.age < 50 AND Survey2.age > 18) OR Survey3.number_of_children IN(2,3,5,7) 他必须建立连接等以支持无限复杂性和嵌套。

显然,有很多方法让用户几乎指定查询的 WHERE 部分可能会出错,即使恶意用户很少见。
他尝试自己解析这些约束,但在复杂的情况下,这表现得非常糟糕,最终他采用了不安全但快速的方法。

什么是解决这个问题的安全、高效的解决方案?

4

0 回答 0