我遇到了一种奇怪的情况,在这种情况下,我必须像在oracle中那样,使用regexp来防止字符串查询的sql注入。由于性能问题,我无法使用准备好的语句。当使用准备好的语句版本时,Oracle处理查询的时间是处理该查询的两倍,这会导致生产环境中出现超时。
通常我会使用类似于oracle的escape操作符{和}的东西,但在本例中,它们在正则表达式中有意义,似乎不起作用。除了单引号之外,对于这样的正则表达式,我需要防范什么呢?
查询示例
SELECT * FROM table where somecolumn = 2 and regexp_like(column, '\Wmy text\W|\Wfoo\W');
虽然我已经看到了有关手动保护免受sql注入的其他问题,但是没有一个涉及到像这样的正则表达式情况。
q escape会这样工作吗?
SELECT * FROM table where somecolumn = 2 and regexp_like(column, q'[\Wmy text\W|\Wfoo\W]');