hibernate - 如何修复 SQL 注入验证码问题 - CWE 564
问题描述
@Override
public AssetLibraryReference selectALRefByName(String entityName,String name) throws Exception {
AssetLibraryReference returnRef = null;
String query = "from " + entityName + " where name = :name ";
try {
returnRef = sessionQueryUtil.doSessionQuery(session -> {
// queryStr.append("from " + entityName + " where name = :name ");
Query q = session.createQuery(query);
q.setString("name", name);
return (AssetLibraryReference)q.uniqueResult();
});
} catch (HibernateException e) {
LOG.error ("Caught hibernate exception",e);
e.printStackTrace();
throw e;
} catch (Exception e) {
LOG.error("Caught Exception :"+e.getMessage());
e.printStackTrace();
throw e;
}
return returnRef;
}
我收到验证码扫描错误Query q = session.createQuery(query);
。谁能帮我解决这个问题。我可以在这里使用什么来解决问题。验证码问题 ID 是 CWE 564。
解决方案
改用 query.setParameter 来使 name 成为防止 SQL 注入的命名参数
@Override
public AssetLibraryReference selectALRefByName(String entityName,String name) throws Exception {
AssetLibraryReference returnRef = null;
String query = "from " + entityName + " where name = :name ";
try {
returnRef = sessionQueryUtil.doSessionQuery(session -> {
// queryStr.append("from " + entityName + " where name = :name ");
Query q = session.createQuery(query);
q.setParameter("name", name);
return (AssetLibraryReference)q.uniqueResult();
});
} catch (HibernateException e) {
LOG.error ("Caught hibernate exception",e);
e.printStackTrace();
throw e;
} catch (Exception e) {
LOG.error("Caught Exception :"+e.getMessage());
e.printStackTrace();
throw e;
}
return returnRef;
}
推荐阅读
- vba - 将“对齐等于”放入宏中
- mysql - 我有两个名为 users 和 stock_transfer_cnf_ord 的表我想加入并获取角色 = courier 的数据
- scala - 如何从 udf 调用文件系统
- java - 如何在jsp页面中显示消息
- angular - 如何在注销时重置 ngrx 效果?NGRX 效果
- java - Android 完成某个活动实例,无论它是单个还是多个
- spring - HTTP 状态 - 401 未经授权
- python - 创建新列并根据 python 中的其他列填充它们
- python - 无法使用openCV从图像中提取每个文本
- php - Laravel 抛出 errno:150 “外键约束的格式不正确”,尽管语法正确