ソフトウェア開発の分野では、SQLインジェクション攻撃を防ぐことが重要です。パラメーター化されたSQLクエリは入力をクリーンアップする最良の方法ですが、一部の開発者は、単一の引用符を逃れ、選択肢として単一の引用でユーザー入力を囲む防御メカニズムを使用しています。
欠陥エスケープテクニック
この方法では、ユーザー入力の単一の引用符をダブルシングル引用符で置き換え、文字列全体を単一の引用符で囲むことを伴います。
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
この手法の原則は、ユーザーが入力した単一の引用が、文字列の終了を防ぐために効果的に中和されることです。したがって、セミコロンやパーセント記号などの他のキャラクターは、文字列の一部になり、コマンドとして実行されません。
注入脆弱性 ]
ただし、この手法は、ユーザー入力自体に二重の単一の引用符が含まれる場合がある場合を処理することはできません。この場合、文字列は終了し、入力の残りの部分はSQLコマンドとして実行できます。
example input
これを説明するには、次のユーザー入力を検討してください:
'SensitiveData' HAVING AMOUNT>2000 OR ''=''
実行後、コードは次のようになります。
select * account = 'sensitivedata'を> 2000または '' = ''
SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''
さらなる考慮事項
このエスケープテクニックには、次のことを含む他の脆弱性があることに注意することが重要です。
コメントや他のステートメントターミネーターを使用した攻撃など、あらゆる種類のSQLインジェクション攻撃から防御することはできません。
一時的な入力クリーニング技術に依存せず、これらのベストプラクティスに従ってSQL注入を防ぐ:
パラメーター化されたSQLクエリまたはJDBCの事前承認ステートメントを使用します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3