Oracle regexp_replace可以防止分号

时间:2017-09-08 17:43:24

标签: oracle sql-injection regexp-replace

以下代码是否足以阻止任何分号保留在v_str中?

regexp_replace(v_str, ';')

或者有人可以绕过它吗?

例如,以下代码段不足以阻止传递“DROP”:

regexp_replace(v_str, 'DROP')

有人可以通过传递'DRDROPOP'来绕过这个。

但是,看起来,上面的分号预防就足够了。你能想出一种打破它的方法吗?

2 个答案:

答案 0 :(得分:2)

是的,这会给你想要的结果。但是,我认为常规ole REPLACE可能比使用regex_ *函数更有效。

WITH t AS
 (SELECT ';1234;abcd;;5678;;;efgh;;' x
    FROM dual)
SELECT x,
       REPLACE(x,
               ';'),
       regexp_replace(x,
                      ';')
  FROM t;

正如其他人所说,这不是防止SQL注入的好方法,但我理解你需要一个垫脚石。

答案 1 :(得分:1)

对于快速临时修复,它可以工作,但它不会阻止狡猾的用户推送查询中的字符。

例如:

'DROP DATABASE' || chr(59)
'DROP DATABASE' || chr(58+1)
...