如何检查字符串是否是查询?防止 sql 注入;
How to check if string is query? Protect from sql injection;
我使用 Spring + Hibernate。
在一部分中,我有原生 sql,例如:
SELECT *
FROM (...) sel
WHERE %s
%s 我收到了 UI。它看起来像 "id = ?1 AND name = ?2..." + 参数列表。
它由查询生成器生成;
现在我有一个案例 UI 可以发送如下内容:
条款:id = 'id; TRUNCATE TABLE schema.foo;'
如何检查该子句不是查询?
我在哪里可以找到一些图书馆?
我会采取另一个方向:与其尝试检测查询是否是恶意的,不如确保查询不能做任何恶意的事情,并在数据库级别授予权限:
如果您有一个 public table,用户为此 table 生成查询,请创建一个数据库用户,该用户只能 SELECT 唯一 [=18] =],并使用特定的 jdbc 连接,使用以前的只读用户连接到数据库,运行 这些 'unsafe' 查询。
我使用 Spring + Hibernate。 在一部分中,我有原生 sql,例如:
SELECT *
FROM (...) sel
WHERE %s
%s 我收到了 UI。它看起来像 "id = ?1 AND name = ?2..." + 参数列表。 它由查询生成器生成;
现在我有一个案例 UI 可以发送如下内容: 条款:id = 'id; TRUNCATE TABLE schema.foo;'
如何检查该子句不是查询? 我在哪里可以找到一些图书馆?
我会采取另一个方向:与其尝试检测查询是否是恶意的,不如确保查询不能做任何恶意的事情,并在数据库级别授予权限:
如果您有一个 public table,用户为此 table 生成查询,请创建一个数据库用户,该用户只能 SELECT 唯一 [=18] =],并使用特定的 jdbc 连接,使用以前的只读用户连接到数据库,运行 这些 'unsafe' 查询。