ホームページ > データベース > mysql チュートリアル > 一重引用符のエスケープは SQL インジェクションに対する信頼できる防御手段ですか?

一重引用符のエスケープは SQL インジェクションに対する信頼できる防御手段ですか?

Mary-Kate Olsen
リリース: 2025-01-18 12:10:16
オリジナル
344 人が閲覧しました

Is Escaping Single Quotes a Reliable Defense Against SQL Injection?

SQL インジェクション保護: 一重引用符エスケープの誤り

ソフトウェア開発の分野では、SQL インジェクション攻撃を防ぐことが重要です。パラメータ化された SQL クエリは入力サニタイズに最適な方法ですが、一部の開発者は依然として、代替防御メカニズムとして一重引用符をエスケープし、ユーザー入力を一重引用符で囲むことに頼っています。

欠陥のあるエスケープ手法

このメソッドは、ユーザー入力内のすべての一重引用符を二重一重引用符に置き換え、文字列全体を一重引用符で囲むことで構成されます。

<code>sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"</code>
ログイン後にコピー

この手法の背後にある考え方は、ユーザーが入力した一重引用符が効果的に無効化され、文字列の終了を防ぐというものです。したがって、セミコロンやパーセント記号などの他の文字は文字列の一部となり、コマンドとして実行されません。

インジェクション脆弱性

ただし、この手法では、ユーザー入力自体に二重の一重引用符が含まれる可能性がある状況には対応できません。この場合、文字列は終了し、残りの入力は SQL コマンドとして実行できます。

入力例

これを説明するために、次のユーザー入力を考えてみましょう:

<code>'SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
ログイン後にコピー

実行後のコードは次のようになります:

<code>SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
ログイン後にコピー

この入力は、SQL クエリに OR 句を正常に挿入し、意図したサニタイズをバイパスします。

さらなる考慮事項

このエスケープ手法には次のような他の脆弱性があることに注意することが重要です。

  • コメントやその他のステートメント終了記号を使用した攻撃など、あらゆる種類の SQL インジェクション攻撃から保護できるわけではありません。
  • パフォーマンスとメンテナンスのオーバーヘッドが発生します。
  • コードを読みにくく理解しにくくする。

ベストプラクティス

アドホックな入力サニタイズ手法に依存せず、SQL インジェクションを防ぐための次のベスト プラクティスに従ってください。

  • パラメータ化された SQL クエリまたは JDBC プリペアド ステートメントを使用します。
  • 予期される入力値と形式のみを許可します (ホワイトリスト)。
  • ブラックリストは、絶対に必要な場合にのみ、追加の緩和策を実施した後に使用してください。
  • 動的 SQL と文字列の連結を避けてください。
  • データベース権限を制限したストアド プロシージャの使用を検討してください。

以上が一重引用符のエスケープは SQL インジェクションに対する信頼できる防御手段ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート