SQL インジェクション・アタックの防止

ユーザー入力から動的 SQL ステートメントが構成される場合で、入力のチェックが不十分の場合、SQL インジェクション・アタックを受ける可能性があります。 複数の手法を使用して、SQL インジェクション・アタックを防止または削減できます。

プロシージャー

SQL インジェクション・アタックの危険性を除去または削減するには、次のようにします。

  • 可能な限り、動的 SQL の使用を回避する。
  • Java™ については、 JDBC ではなく、 pureQuery® または SQLJ を使用してください。
  • 可能な限り、ビュー、アクセス制御メカニズムなどのシステム・セキュリティー技法を使用する。

    アプリケーション内のセキュリティーの制限を理解する。 システム・セキュリティーでは、アプリケーション・プログラムでは使用できないセキュリティー・メカニズムおよび保全性メカニズムを使用できます。 システム・セキュリティーで提供できる保証のレベルを高くすることができます。 アプリケーションがクライアントで実行され、アプリケーションが使用する保護層およびファイアウォールがデータベースよりも少ない場合、それらの制限に対処する必要があります。

  • SQL インジェクション・アタックによってステートメントのセキュリティーが危険にさらされる場合でも、行の許可と列マスクを使用してデータを保護する。
  • 入力データをホスト変数に代入して、その値のみ含まれるようにする、または動的 SQL でパラメーター・マーカーを使用する。
  • すべての入力を必ずチェックする。
    • 入力が目的のデータ型およびフォーマットであるかチェックする。 これは、プログラムを正しく動作させるために、すべてのプログラムで必要ですが、SQL ステートメントの一部として使用するデータに対しては特に重要です。
    • 数値比較に対しては数値のみ受け取る。
    • 特殊文字を適用しない場合、それらの文字を許可しない。