2
<asp:CheckBox ID="chkIsHidden" runat="server" Enabled="false" 
    Checked='<%# Convert.IsDBNull(Eval("Is_Hidden")) ? false : Convert.ToBoolean(Eval("Is_Hidden")) %>' 
/>

上記のコードでは、セキュリティ プログラムがスキャンを実行し、「ブラインド SQL インジェクション」と警告して、とても混乱しています。

  1. なぜSQLインジェクションがあるのですか?
  2. SQLインジェクションを回避するために修正するには?
4

1 に答える 1

1

おわかりのように、Web アプリケーションがエラー メッセージを返さなくても、ブラインド SQL インジェクション攻撃を受けやすい可能性があります。ただし、次のベスト プラクティスを使用して、組織のアプリケーションを攻撃から保護できます。

  1. アプリケーションの開発または展開中に脆弱性の検出と評価が確実に実行されるように、安全なコーディング プラクティスを実施するポリシーを作成します。

  2. データがアプリケーションに出入りする場所を開発者に特定させ、スクリプト、データ アクセス ルーチン、および SQL クエリの近くに置く前に、HTTP 要求のすべての部分に対して検証が行われるようにします。これにより、ユーザー提供のデータが SQL ステートメントの構文を変更できなくなります。

  3. ストアド プロシージャを使用して、Web アプリケーションを SQL から完全に分離します。ストアド プロシージャは、アプリケーションが JDBC の CallableStatement や ADO のコマンド オブジェクトなどの安全なインターフェイスを使用して実行する必要があります。SQL ステートメントをオンザフライで生成する必要がある場合は、PreparedStatements を使用します。PreparedStatements とストアド プロシージャの両方が、ユーザー入力が追加される前に SQL ステートメントをコンパイルし、ユーザー入力が実際の SQL ステートメントを変更することを不可能にします。

  4. 脆弱性評価ツールを使用して、SQL インジェクションやその他のセキュリティ脆弱性の発見を自動化することを検討してください。

  5. インシデント対応計画を作成します。詳細で十分に練られた計画を立てることで、発生した攻撃を整然と効果的に処理し、組織への影響を最小限に抑えることができます。

于 2012-12-10T09:02:04.977 に答える