代码之家  ›  专栏  ›  技术社区  ›  Lucas Holt

如何使用类似regexp的查询安全地防止Oracle中的SQL注入

  •  0
  • Lucas Holt  · 技术社区  · 6 年前

    我遇到了一种奇怪的情况,在这种情况下,我必须像在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]');
    
    0 回复  |  直到 6 年前