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注入的保护,或者还有其他我需要做的事情......
另外一件事是提到 - " 总是逃避你的数据 "怎么能实现?
我不知道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)
到您的查询,那么下次您从数据库加载该查询并将其呈现在您的网络浏览器中时,它将运行该脚本。
您需要确保您的框架转义所有非法字符,即:在将其插入数据库之前
更改<为。如果您的框架不这样做,您必须手动执行此操作。有大量的库可以为您正确转义代码。例如,看看这个问题及其答案。<
| 归档时间: |
|
| 查看次数: |
8656 次 |
| 最近记录: |