我使用Spring + Hibernate。 在一个部分我有本机sql像:
SELECT *
FROM (...) sel
WHERE %s
%s我从UI收到。它看起来像“id =?1 AND name =?2 ...”+ params列表。 它由查询构建器生成;
现在我有一个案例,当UI可以发送类似的东西: CLAUSE:id ='id; TRUNCATE TABLE schema.foo;'
如何检查该子句不是查询? 我在哪里可以找到一些图书馆?
答案 0 :(得分:1)
我会采取另一个方向:不要试图检测查询是否是恶意的,而是确保查询无法做任何恶意的事情,并在数据库级别提供资助:
如果你有一个公共表,用户为这个表生成查询,创建一个只能在这个唯一的表上SELECT的数据库用户,并使用一个特定的jdbc连接,它使用前一个只读用户连接到数据库,运行这些不安全的'查询。