我有一个库,它根据调用者提供的JPA WHERE语句执行查询。我正在执行以下JPA查询:
public void executeQuery(String jpaWhereStatement) {
String queryString = "SELECT entity FROM " + MyEntity.class.getSimpleName() + " entity WHERE " + jpaWhereStatement;
}
仍然使用query.setParameter()
插入查询参数,但我担心我可能会允许SQL注入攻击。如果这是易受攻击的,我该如何修复此代码?
答案 0 :(得分:6)
在不了解呼叫者的情况下,很难说。如果没有仔细生成where语句,那么可能存在漏洞。总的来说,这种方法对我来说看起来不错。我个人会更明确地说明如何生成WHERE子句并始终使用参数。
作为一般规则,永远不要相信任何用于构造SQL语句的数据,无论它来自客户端还是来自数据库。
答案 1 :(得分:1)
正如Bunting指出的那样(和Adam Bien一样),如果你坚持参数化查询,你应该是金色的。当然,如果您的实施中存在一般漏洞,那么您可能会面临风险。
答案 2 :(得分:0)
根据经验,当涉及用户输入或来自GET的输入时,请使用Criteria确保参数被转义。 I.E.不要使用HQL。
如果不涉及get的用户输入或输入,则可以使用HQL。
但是,是的,如果您使用setParamter()
,可能没有SQL注入问题。