java - 原生 sql 查询 - SQL 注入(inject)攻击

标签 java security jpa

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

如果我在原生sql中使用参数我可以避免SQL注入(inject)攻击,但我的问题是我不能确定用户提交了多少数据字段。

最佳答案

你应该使用位置参数绑定(bind):

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

请注意,正如 JPA 规范所述,您不应在查询中使用命名参数绑定(bind) (:empName)

Only positional parameter binding may be portably used for native queries.

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

关于java - 原生 sql 查询 - SQL 注入(inject)攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640234/

相关文章:

java - OneToMany 关系孤儿不会从数据库中删除

java - 为什么当我记录消息时 java.util.logging 显示错误的类

php - 防止在 Web 应用程序中直接 URL 访问 PHP 文件

使用 Windows 身份验证的 WCF 调用

java - JPA 映射 - 关系中的复合键

java - 使用 JPA/Hibernate 在集合中搜索

java - 正确使用final

java - 什么是默认的 JDBC 字符编码

java - 清除 JPanel 或 JFrame

sql-server - 执行查询限制