在一个调查框架中,用户输入(即“询问”调查问题,而不回答它们)是相当可信的,我的前任用几乎直接从用户定义的约束构建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部分可能出错,即使恶意用户很少见。
他试图自己解决这些约束,但是由于复杂的情况表现得非常糟糕,最终他采用了不安全但快速的方法。
对于这个问题,什么是安全的,有点高效的解决方案?