此JPA查询是否容易受到SQL注入攻击?

时间:2011-08-11 17:16:42

标签: java sql jpa sql-injection

我有一个库,它根据调用者提供的JPA WHERE语句执行查询。我正在执行以下JPA查询:

public void executeQuery(String jpaWhereStatement) {
String queryString = "SELECT entity FROM " + MyEntity.class.getSimpleName() + " entity WHERE " + jpaWhereStatement;
}

仍然使用query.setParameter()插入查询参数,但我担心我可能会允许SQL注入攻击。如果这是易受攻击的,我该如何修复此代码?

3 个答案:

答案 0 :(得分:6)

在不了解呼叫者的情况下,很难说。如果没有仔细生成where语句,那么可能存在漏洞。总的来说,这种方法对我来说看起来不错。我个人会更明确地说明如何生成WHERE子句并始终使用参数。

作为一般规则,永远不要相信任何用于构造SQL语句的数据,无论它来自客户端还是来自数据库。

答案 1 :(得分:1)

正如Bunting指出的那样(和Adam Bien一样),如果你坚持参数化查询,你应该是金色的。当然,如果您的实施中存在一般漏洞,那么您可能会面临风险。

答案 2 :(得分:0)

根据经验,当涉及用户输入或来自GET的输入时,请使用Criteria确保参数被转义。 I.E.不要使用HQL。

如果不涉及get的用户输入或输入,则可以使用HQL。

但是,是的,如果您使用setParamter()可能没有SQL注入问题。