首页 > 解决方案 > 如何使用 regexp_like 查询安全地防止 Oracle 的 sql 注入

问题描述

我处于一种奇怪的情况,我必须在 Oracle 中使用 REGEXP_LIKE 来防止通过字符串查询进行 SQL 注入。由于性能问题,我无法使用准备好的语句。当使用准备好的语句版本时,Oracle 需要两倍的时间来处理导致我们生产环境中超时的查询。

通常我会使用 oracle 的转义运算符 { 和 } 之类的东西,但在这种情况下,它们在正则表达式中有意义并且似乎不起作用。除了单引号之外,对于这样的正则表达式情况,我还需要注意什么?

查询示例

SELECT * FROM table where somecolumn = 2 and regexp_like(column, '\Wmy text\W|\Wfoo\W');

虽然我已经看到其他关于手动保护免受 sql 注入的问题,但没有一个处理像这样的正则表达式案例。

aq escape会这样工作吗?

SELECT * FROM table where somecolumn = 2 and regexp_like(column, q'[\Wmy text\W|\Wfoo\W]');

标签: oracleplsql

解决方案


推荐阅读