我正在与 JPA 合作。如果我使用本机 sql 查询(而不是实体查询),我的应用程序怎么可能是 SQL 注入安全的?我需要使用用户从 html 表单提交的数据构建本机 sql 查询。
如果我在本机 sql 中使用参数,我可以避免 SQL 注入攻击,但我的问题是我无法确定用户提交了多少数据字段。
您应该使用位置参数绑定:
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 注入攻击。
归档时间: |
|
查看次数: |
3353 次 |
最近记录: |