web-dev-qa-db-ja.com

この場合、SQLインジェクションは可能ですか(REGEX)?

私はプログラムを持っているウェブサイトにいます、キーワードのための検索入力があります。

&または<または>を入力して検索すると、Got error 'empty (sub)expression' from regexpエラーが返され、$または^または.*を入力すると、REGEXP関数に依存しているように見えるすべてのキーワードが一度に取得されますMySQLから一致します。

さて、私はaaaaaaa' OR SLEEP(999) -- -を試しましたが、出力は次のとおりでした:

残念! aaaaaaa\'OR SLEEP(9999)--在庫なし

では、'がエスケープされて\'になり、\'を試して'だけがエスケープされているかどうかを確認しましたが、両方ともエスケープされているようです:

残念! aaaaaaa \\ 'OR SLEEP(9999)--在庫なし

3 \はブロック引用のように2ではありません

私もurlエンコーディングを試しましたが、同じ出力が得られました。

ちなみにアプリはPHPとMySQLを使用しています

3
kevin

正規表現からコマンドを呼び出すことはできないため、この場合はSQLインジェクションを実行できません。

ただし、非常に長い処理の正規表現を入力すると、Webサイトで問題が発生する可能性があります。たとえば、複数のワイルドカードを使用した先読み( Mastering Lookahead and Lookbehind を参照)。

次に例を示します(Java regex):

\(([$_a-zA-Z][$_a-zA-Z0-9]*(?:\.[$_a-zA-Z][$_a-zA-Z0-9]*)*(?:,[$_a-zA-Z][$_a-zA-Z0-9]*(?:\.[$_a-zA-Z][$_a-zA-Z0-9]*)*)*)*\)

正規表現が使用する構文は少し異なる場合がありますが、これは一般的な考え方です。

1
OSH