【发布时间】:2016-03-15 15:57:47
【问题描述】:
我有一个带有 LIKE 子句的 SQL 查询,该子句使用 % 通配符。
我读过 LIKE 子句可能有问题,比如这里:http://githubengineering.com/like-injection/。
但是我不确定对于某些用户输入,下面两个不同的函数调用之间是否存在性能差异(尽管查询本质上是相同的),以及它们之间的差异是否与链接中讨论的内容有关.
我预计对第一个函数的调用只会返回像“&my-query%”这样的结果,因此用户的输入实际上是由两个百分号包围的,但事实并非如此。
(query db ["SELECT * FROM some_table WHERE some_value LIKE ?"
(str "%" user-input "%")])
(query db ["SELECT * FROM some_table WHERE some_value LIKE '%' ? '%']"
user-input])
【问题讨论】:
-
任何涉及用户输入以构建 SQL 的字符串连接都存在安全风险 - 始终使用准备好的语句来设置用户提供的参数。
标签: sql postgresql jdbc clojure sql-like