【发布时间】:2011-03-16 23:25:02
【问题描述】:
String badInput = rawInput.replace("'","''");
ResultSet rs = statement.executeQuery("SELECT * FROM records WHERE col1 = '"+badInput+"'";
有没有办法对这段代码进行类似“Bobby Tables”的攻击?
【问题讨论】:
-
说真的,使用PreparedStatement 很难那吗? 为什么人们坚持坚持使用串联 SQL?
-
我完全同意,@Randolpho - 我在这里采取了更多的魔鬼拥护者的立场,因此也为改变我可能遇到的遗留代码获得了更好的论据。 :)
-
啊,我明白了。我只是不明白为什么过去 10 年(或更长时间)编写软件的人会使用除了正确参数化的 SQL 之外的任何东西。我责备糟糕的书籍和博客文章。
-
当您检查 O'Malley 先生的记录时会发生什么?换句话说,撇号可以是合法字符。
-
@Epaga:查看 Avid 的论文(在他关于重复问题的帖子中提到)。它提到的一个邪恶黑客是使用 unicode 单引号,它实际上不是单引号,但 sql 引擎会很乐意翻译它以提供帮助。
标签: java sql security sql-injection