【发布时间】:2017-11-22 20:20:19
【问题描述】:
我想保护 SQL 注入中的参数化 SQL 查询。我浏览了一篇文章,其中描述了使用 PreparedStatement 避免 SQL 注入。 link
根据文章,它描述preparedstament 有助于从缓存中选择预编译查询,并且在最后一步用用户数据替换花边,并且不会再次编译查询。因此,如果有人提供 sql 查询作为用户输入,将有助于避免 SQL 注入,因为该查询只会编译一次。
但是如果有人给出带有特殊字符的字符串,例如'x'='x',会发生什么。例如,当占位符在“SELECT * FROM users WHERE username = 'blah' AND password = 'foo' OR 'x'='x'”这样的最终查询中替换为“x”=“x”之类的用户数据时。 Java PreparedStatement 如何处理这些类型的特殊字符?
谁能帮我理解这个
【问题讨论】:
-
准备好的语句不必处理这个,因为查询和数据是分开发送到服务器的。
-
如果不是由您添加,应该如何添加 OR?
-
@YCF_L 阅读问题。在链接中,我添加了您指出的答案中包含的博客文章。我只问了我知道的缺失点
-
[...] 准备好的语句所做的是将其分为两部分。第一个是,
I need you to pick someone up from the airport- 和 谁 你应该接,你被告知单独。在这种情况下,这自然意味着你只需耸耸肩就走,“我不认识任何叫Mary, and then kill yourself的人”——就是这样,没有伤害。因为你知道你得到你的指令和数据(名称)来分别执行它,所以你没有可能将 data 的部分与 instruction 的部分混淆i>.
标签: java sql prepared-statement sql-injection