spring/hibernate 如何为我们提供防止 SQL 注入的保证以及它是如何在内部处理的?
Posted
技术标签:
【中文标题】spring/hibernate 如何为我们提供防止 SQL 注入的保证以及它是如何在内部处理的?【英文标题】:How spring/hibernate gives us guarantee to protect from SQL injection and how it's handled internally? 【发布时间】:2016-10-14 04:44:15 【问题描述】:我知道 spring 和 hibernate 可以防止 SQL 注入。
-
但是我如何知道我的应用程序可以安全地免受 SQL 注入攻击呢?
任何 ORM 工具如何处理 SQL 注入
提前谢谢..
【问题讨论】:
请阅读this 感谢您提供有用的信息..但是我如何确保我的应用程序免受 sql 攻击 在这种情况下,OWASP 是你的圣经,从 this 文章开始 是的,谢谢您的帮助 只有正确使用 API 才能保护您。如果你用错了,没有什么可以保护你。 【参考方案1】:如果您正确使用 API,Hibernate 确实可以防止 SQL 注入。
发件人:https://www.owasp.org/index.php/Hibernate#A_note_about_SQL_injection
关于 SQL 注入的说明
既然是热门话题,我现在就讲到这里,稍后再详细讨论。
Hibernate 不授予对 SQL 注入的免疫力,人们可以随意滥用 API。 HQL(SQL 的 Hibernates 子集)没有什么特别之处,因此它或多或少容易受到影响。 createQuery(String query) 和 createSQLQuery(String query) 等函数会创建一个 Query 对象,该对象将在调用 commit() 时执行。如果查询字符串被污染,则您有 SQL 注入。稍后将介绍这些函数的详细信息。
始终使用PreparedStatement 来防止 SQL 注入,它是 JDBC API 的一部分,Hibernate 本身使用此 API see。
例如:
String query1 = "select * from MyBean where id = "+ id;//Not secure
String query2 = "select * from MyBean where id = :id";//Secure
关于此主题的有用文章:http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-hibernate
【讨论】:
以上是关于spring/hibernate 如何为我们提供防止 SQL 注入的保证以及它是如何在内部处理的?的主要内容,如果未能解决你的问题,请参考以下文章