原生sql查询-SQL注入攻击

Native sql query- SQL Injection Attack

提问人:Eduardo 提问时间:9/3/2014 最后编辑:Eduardo 更新时间:9/4/2014 访问量:6704

问:

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

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

Java 安全性 JPA

评论


答:

10赞 Maciej Dobrowolski 9/3/2014 #1

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

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

请注意,您不应该在查询中使用命名参数 binding(),正如 JPA Spec 所说的那样:empName

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

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

评论

0赞 Zon 11/14/2020
如果能解释为什么,我将不胜感激?比 :myParameter 更好,以及它如何防止注入。
0赞 Maciej Dobrowolski 11/14/2020
你的意思是位置与命名参数绑定吗?这是关于本机查询的 - 在这种情况下,JPA 规范不保证可移植性