如何检查字符串是否是查询?防止sql注入;

时间:2016-06-03 13:37:19

标签: sql spring hibernate jpa sql-injection

我使用Spring + Hibernate。 在一个部分我有本机sql像:

SELECT * 
FROM (...) sel
WHERE %s

%s我从UI收到。它看起来像“id =?1 AND name =?2 ...”+ params列表。 它由查询构建器生成;

现在我有一个案例,当UI可以发送类似的东西: CLAUSE:id ='id; TRUNCATE TABLE schema.foo;'

如何检查该子句不是查询? 我在哪里可以找到一些图书馆?

1 个答案:

答案 0 :(得分:1)

我会采取另一个方向:不要试图检测查询是否是恶意的,而是确保查询无法做任何恶意的事情,并在数据库级别提供资助:

如果你有一个公共表,用户为这个表生成查询,创建一个只能在这个唯一的表上SELECT的数据库用户,并使用一个特定的jdbc连接,它使用前一个只读用户连接到数据库,运行这些不安全的'查询。