以下代码是否足以阻止任何分号保留在v_str中?
regexp_replace(v_str, ';')
或者有人可以绕过它吗?
例如,以下代码段不足以阻止传递“DROP”:
regexp_replace(v_str, 'DROP')
有人可以通过传递'DRDROPOP'来绕过这个。
但是,看起来,上面的分号预防就足够了。你能想出一种打破它的方法吗?答案 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)
...