LIKEを使用してSQLクエリをコンパイルする際の論理的な脆弱性

ユーザーデータがLIKE演算子の下のクエリに該当する場合、非常に注意する必要があります。

事実、 mysql_real_escape_stringを含む単一のフィルタリング関数や準備されたステートメントでさえ、ワイルドカード文字に関連する論理エラーから保護しません。



Webアプリケーションを監査する私たちのプラクティスでは、このエラーは、SQLインジェクションに対して脆弱なWebアプリケーションの約5分の1(19.3%)で発生します。



LIKE演算子は、文字列型の不正確な値で検索するために使用されます。

演算子構文では、ワイルドカードセマンティクスを使用できます。

%は従来の*を置き換えます-任意の文字のシーケンス

_クラシックを置き換えますか? -任意の1文字



開発者が犯すよくある間違いは、ユーザーデータがSQLクエリに入るときに%文字と_文字がフィルター処理されないことです。 はい、この場合、クエリ構文に違反すること、つまり演算子を実装することはできませんが、Webアプリケーションのロジックが低下する可能性があります。



また、一般的な誤解は、脆弱性が最小限の長い文字列によって阻止されると考えることです。

SQLクエリ

SELECT asd FROM t1 WHERE name LIKE '%%%%%%%%%%%%%%%%%%%%%%%%%%%'





のように動作します

SELECT asd FROM t1 WHERE name LIKE '%%'







ただし、デザインに論理エラーがない場合でも、明らかに不要なワイルドカードはスキップしないでください。 結局、LIKEを使用してリクエストをスローする方法は誰もが知っており、LIKEに完全なワイルドカードを使用すると、さらにスローダウンします。

これは、DoS、DDoS、またはエラーメッセージ(max_execution_timeの有効期限など)を呼び出すことによってサーバーから情報を受信するために使用できます。



All Articles