私はプログラムを持っているウェブサイトにいます、キーワードのための検索入力があります。
&
または<
または>
を入力して検索すると、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を使用しています
正規表現からコマンドを呼び出すことはできないため、この場合は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]*)*)*)*\)
正規表現が使用する構文は少し異なる場合がありますが、これは一般的な考え方です。