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 注入的保证以及它是如何在内部处理的?的主要内容,如果未能解决你的问题,请参考以下文章

如何为我们的系统提供 API [关闭]

Java Web 应用程序“插件”架构

如何为反应组件提供 Id 或 Attribute

我们如何为 64 位操作系统设置 oledb 提供程序

在Spring和Hibernate中使用TransactionProxyFactoryBean

如何为联系人提供 UI 以在 CRM Dynamics 中更新他们的详细信息?