1

Asp.Net プロジェクトのスキャン中に、アクセス制御データベースというエラーが発生しました。

それは言う

「適切なアクセス制御がなければ、ユーザーが制御する主キーを含む SQL ステートメントを実行すると、攻撃者が許可されていないレコードを表示する可能性があります。」

入力フィールドには適切な検証があり、データはレイヤー間で移動します。つまり、フロント エンド (UI) -> ビジネス レイヤー -> データ レイヤーです。

問題を解決できるように、コントロールまたはデータベースに設定するプロパティはありますか

4

2 に答える 2

5

「アクセス制御: データベース」は、攻撃者から NUMERIC 入力データを受け取り、クエリに提供することを意味します。「正の整数であることを確認してください」などの形式で検証される場合がありますが、攻撃者が値を制御できる場合、クエリの主キーを変更して別のデータを取得できるリスクがあります。

これが SQL インジェクションと異なるのは、慣習的に SQL インジェクションは、攻撃者がクエリの構造を変更したことを意味するという点だけです (たとえば、キーワードを追加することによって)。もちろん、どちらも SQL へのコンテンツの注入です。

「コントロールまたはデータベースにプロパティはありますか?」いいえ。

  1. このデータを適切に検証するには、攻撃者が追加を許可されている主キーのみを提供していることを確認できるように、アプリケーション レベルの制御を配置する必要があります。たとえば、リモート クライアントに値をまったく渡さないことで、これを行うことができます。おそらく、リクエスト全体でセッションに保持することができます。

  2. 完全に正当な問題を適切に解決するには: 監査分析またはプライマリ タグのドロップダウンで [問題ではない] を選択します。コメントを入力して、ロジックが正当で安全であると考える理由をセキュリティ リードに説明します。必要のない愚かな送信ボタンを使用してコメントを送信します。

  3. 正当な問題のクラス全体を適切に解決するには: 私は通常、信頼できないデータのソースがリモートの攻撃者ではなくデータベースである Access Control:Database の問題を非表示にするフィルターを作成します。

この場合、クエリ 1 は "Jane Doe" を検索し、彼女の foo ID を取得します。クエリ 2 は、ID = Jane の foo ID である別の場所を検索します。ID は、最初のデータベース クエリに由来します。データには、「DATABASE」と呼ばれる Fortify Taint フラグが含まれます。あなたとあなたのセキュリティ監査人は、この情報源を信頼するかもしれません. または、ハッカーがアプリの破壊を可能にすることを目的とした悪意のあるデータを隠している別の場所と見なされる場合もあります。私は知りません。

あなたとあなたのセキュリティ監査人がデータベースを信頼している場合は、「if taint:database -> hide the issue」というフィルターを作成し、このフィルターをプロジェクトのテンプレートのデフォルトのフィルターセットに入れることができます。これは、Audit Workbench の Tools->Project Configuration... ダイアログを使用して行います。

于 2012-01-20T15:44:08.213 に答える