原生 sql 查询 - SQL 注入攻击

Edu*_*rdo 2 java security jpa

我正在与 JPA 合作。如果我使用本机 sql 查询(而不是实体查询),我的应用程序怎么可能是 SQL 注入安全的?我需要使用用户从 html 表单提交的数据构建本机 sql 查询。

如果我在本机 sql 中使用参数,我可以避免 SQL 注入攻击,但我的问题是我无法确定用户提交了多少数据字段。

Mac*_*ski 6

您应该使用位置参数绑定:

String queryString = "select * from EMP e where e.name = ?1";
Query query = em.createNativeQuery(queryString, Employee.class);
query.setParameter(1, "Mickey");
Run Code Online (Sandbox Code Playgroud)

请注意,您不应:empName像 JPA 规范所说的那样在查询中使用命名参数绑定 ( )

只有位置参数绑定可以可移植地用于本机查询。

这应该可以保护您免受 SQL 注入攻击。