我的Checkmarx报告在我的Spring Boot应用程序中将此方法标记为高严重性二阶SQL注入:
public void updateEmployees(int storeId) {
List<Employee> employees = employeeRepo.findByStoreId(storeId);
employees.stream().forEach(e->{
e.setActive('Y');
employeeRepo.save(s);
});
}
根据Checkmarx:
... 应用程序通过在查询中嵌入不受信任的字符串来构造此SQL查询,而无需进行适当的清理。连接的字符串被提交到数据库,并在数据库中进行相应的分析和执行。
setActive('Y')行似乎是问题所在。
我在Spring Data JPA使用中找到的数据清理指南建议使用从entityManager实例创建的TypeQuery。类似:
String jql = "from Employee where storeId = :storeId";
TypedQuery<Account> q = em.createQuery(jql, Employee.class)
.setParameter("storeId", storeId);
然而,在我的应用程序中,实体管理器是由Spring Boot隐式创建的。
因此,为了在这里实现“适当的清理”,我是否需要显式地创建EntityManager实例(以访问其createQuery方法)?或者有没有一种更直接的方法来实现这一点,而不需要xplicit EntityManager实例化?
这是一个假阳性,您需要联系供应商,并将此情况通知他们。当Hibernate生成SQL时,它使用PreparedStatement。您更改的所有实体字段都将与查询分开发送,不会有任何连接。
Spring Data不会改变HiberNate处理实体的方式。所以要么这是一个误报,要么你看错了代码行。
我是Spring Boot的新手,我有一个Spring Boot应用程序似乎忽略了@PreDestroy注释-当我从命令行或通过Eclipse运行时,我从来没有看到@PreDestroy代码在应用程序关闭时运行(例如通过ctrl-c) 代码如下。。。 应用java: 消息处理器配置: 消息处理器:
问题内容: 我通常在.NET中这样写我的SQL 然后执行以下操作: 但是,当我获得的数据直接来自数据库时,我也应该这样做addParameter吗? 这可以接受吗?什么是最佳做法? 问题答案: 您应该始终使用参数: 数据库中的值从哪里来? 在您的示例中,您可以相信’group_id’未被修改为您所不期望的吗? 信任任何人 具有有限数据库访问权限的人可以直接注入其他地方使用的字段吗? 表现 此外,它
我正在用Thymeleaf构建一个Spring Boot应用程序。我的模板(视图)和静态文件夹都在src/main/Resources/静态和src/main/Resources/tem板下。当我通过main方法(使用eclipse)运行应用程序时,一切都很好。但是,我已经按照说明创建了一个war文件,当我将其部署到Tomcat 7时——静态内容丢失了,只显示了Thymeleaf html模板。
作为一个新的Web应用程序项目的一部分,我计划学习Spring。我开始通读Spring框架参考。当我在谷歌上搜索时,我遇到了Spring boot。我所理解的是,Spring boot通过减少配置帮助构建应用程序的速度比Spring快得多。现在我有点困惑,我应该继续学习Spring还是跳转到Spring boot。我的目的是了解Spring作为一个框架是如何工作的,而不是一些特性。所以请让我知道,
我正在使用Spring boot 2.0.2应用程序通过HTTPS对外部api进行REST api调用。 我是TLS和SSL的新手。我的理解是,TLS是一种更安全的方式,用于传输安全的敏感数据。 我的问题是: 如何确定我的应用程序使用的TLS版本
我有两个项目。我用Angular2 cli构建的Angular2应用程序和只为Angular2应用程序服务的Spring Boot应用程序。我用构建Angular2应用程序,它会生成一个文件夹。然后,我将文件夹的内容放在Spring Boot应用程序的中。 我的Spring启动应用程序有两个文件。 Spring Boot应用程序类: 及其应用。属性文件: 它工作得很好,但是如果我转到一个url并点