「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 逃げる単一の引用は、SQL注入に対する信頼できる防御ですか?

逃げる単一の引用は、SQL注入に対する信頼できる防御ですか?

2025-03-23に投稿されました
ブラウズ:449

Is Escaping Single Quotes a Reliable Defense Against SQL Injection?

sqlインジェクション保護:単一の引用の誤り逃避

ソフトウェア開発の分野では、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の事前承認ステートメントを使用します。

    予想される入力値とフォーマット(ホワイトリスト)のみが許可されています。
  • ブラックリストは、絶対に必要な場合にのみ使用され、他の緩和策が実装された後に使用されます。
  • 動的SQLと文字列の連結を避けます。
  • 限られたデータベース権限を使用してストアドプロシージャの使用を検討します。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3