当前位置:  开发笔记 > 数据库 > 正文

使用预准备语句进行SQL注入?

如何解决《使用预准备语句进行SQL注入?》经验,为你挑选了1个好方法。

如果我没记错的话,我认为Jeff在Stack Overflow播客中提到了SQL预处理语句中可能存在的弱点.我想知道他所指的是哪种弱点?它可能只是关于它的不当使用,还是更险恶的东西?

在我记忆中,播客没有更深入地探讨这个主题,它只是一句话.



1> Pablo Santa ..:

我认为他说的是,当你使用Prepared Statements时,SQL服务器可以缓存你的查询执行计划,因此,即使你修改执行查询的一些参数,服务器也可能选择错误的(可能是缓存的)执行计划这会表现得非常糟糕.

他还提到了SQL Server 2008的一个新功能,即强制引擎重新评估他用来克服这种情况的执行计划.

有了准备好的陈述,我唯一的问题就是这个.请考虑以下Java代码:

String sql = "select * from table where name like ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "PATTERN%");
ResultSet rs = pstmt.executeQuery();

在这里,您可以预期,如果您在表(名称)上有索引,它将由查询计划使用.好吧,它不会.因为PraparedStatement必须预先编译并预期最坏的情况:'%PATTERN%',例如.所以,它不会优化.我花了一段时间才想出这个.这导致我的数据库受损.:(

希望能帮助到你.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有