我已经使用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注入的保护,或者还有其他我需要做的事情......
另外一件事是提到 - " 总是逃避你的数据 "怎么能实现?
我正在使用Struts2框架和Hibernate,我正在增强一个我没有启动的系统,我增强了系统的一些功能并在产品上实现了它。但是,当他们使用登录模块中的Acunetix进行扫描时,系统中检测到一些威胁(警报),其中警报显示:
警报:SQL 注入
严重性:高
描述:该脚本可能容易受到 SQL 注入攻击。
建议:您的脚本应该过滤用户输入中的元字符。查看详细信息以获取有关修复此漏洞的更多信息。
然后,我检查了该警报中出现错误的脚本。老开发人员使用 Hibernate 创建查询。
List<UserBean> users = session.createQuery("from UserBean where username =?")
.setParameter(0,username)
.list();
Run Code Online (Sandbox Code Playgroud)
我的问题是:
- 使用 Hibernate 的此查询是否无法避免 SQL 注入?
-.setParameter是否应该.setString更具体以避免 SQL 注入?
或者以上都不是?
谢谢你的时间。