ソフトウェア開発の分野では、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 インジェクションに対する信頼できる防御手段ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。