在Hibernate中防止SQL注入

Juz*_*ala 10 hibernate sql-injection hql parameterized

我已经使用hibernate与我的数据库交互,现在我想使我的数据库层对SQL注入安全,所以我做了一些研究,我发现我的查询应该参数化,所以这是否意味着我只是构建我的HQL查询如:

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?")
.setString(0, name)
.list();
Run Code Online (Sandbox Code Playgroud)

然后它被参数化并受到SQL注入的保护,或者还有其他我需要做的事情......

另外一件事是提到 - " 总是逃避你的数据 "怎么能实现?

She*_*ari 4

我不知道setString(),但如果它与那么是相同的setParameter(),那么这样做就足以防止 sql 注入。

更新

通过转义数据,意味着您必须确保数据库中没有存储危险值。

一个简单的例子是,如果您传入参数

String name = "<script>alert('Hello');</script>";
//insert this name into Mother, and then when you load it from the database, it will be displayed    

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?")
.setString(0, name)
.list();
Run Code Online (Sandbox Code Playgroud)

到您的查询,那么下次您从数据库加载该查询并将其呈现在您的网络浏览器中时,它将运行该脚本。
您需要确保您的框架转义所有非法字符,即:在将其插入数据库之前 更改<为。如果您的框架不这样做,您必须手动执行此操作。有大量的库可以为您正确转义代码。例如,看看这个问题及其答案。&lt;

  • -1。转义输入数据并不是预防 XSS 的好方法。更好的方法是在将不可信数据插入到危险的上下文(例如 HTML 页面)中时转义这些数据,同时考虑到该上下文的规则。另请参阅 [OWASP XSS 预防备忘单](http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet)。另外问题是关于 SQL 注入,而不是关于 XSS。 (3认同)