2017-09-08 5 views
1

v_strにセミコロンが残らないようにするには、次のコードで十分ですか?セミコロンを避けるためにOracle regexp_replace

regexp_replace(v_str, ';') 

誰かがそれを回避できる方法はありますか?

は、たとえば次のコードが渡されるのブロック「DROP」に十分ではない。

regexp_replace(v_str, 'DROP') 

誰かが「DRDROPOP」を渡すことによって、これを回避することができます。

しかし、おそらく上記のセミコロン防止で十分です。あなたはそれを壊す方法を考えることができますか?

+0

は、我々はそれをリファクタリングの真っ只中にあります。しかし、現時点では、迅速な修正が必要です。上記はすべてのセミコロンを捕まえるようです。 –

+0

@ Stick-With-SQL "クイック"修正に注意してください。私の経験では、彼らはしばしば適切な修正のdeprioritizationをもたらします。 「今はうまくいきますが、なぜもっと時間を費やす必要がありますか?」 – jpmc26

+0

よろしくお願い致します。私たちは全アプローチを再構築するように推し進めようとしています –

答えて

2

はい、望ましい結果が得られます。しかし、私はregular 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

一時的な修正を迅速に行うには効果がありますが、巧妙なユーザーがクエリで文字をプッシュすることはありません。例えば

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

chr(59)は、regexp_replace関数に渡される前にv_strのセミコロンに解決されているようにも削除されます。 –

関連する問題