2012-01-13 10 views
1

Asp.Netプロジェクトは、アクセス制御データベースを言ってエラーを得た走査させながら、HP FORTIFY 360

それは、ユーザ制御が含まれているSQL文を実行し、適切なアクセス制御がなければ」

を語りますプライマリキーを使用すると、攻撃者は不正なレコードを閲覧する可能性があります。

が入力フィールドのための適切な検証があり、データは層を横切って移動しても、すなわち、フロントエンド(UI) - >ビジネス層 - >データ層。

は問題が

+0

ルールID、影響および尤度(詳細タブに表示されます)とは何ですか?データはどのように検証されますか? ORM(nHibernate、LINQなど)を使用していますか? – LaJmOn

答えて

4

を解決できるように設定するための制御やデータベース上の任意のプロパティには、「アクセス制御:データベース」があるNUMERIC入力データが攻撃者から受け取った、とクエリに設けられています。 "正の整数である"のような形式で検証されるかもしれませんが、攻撃者が値の制御権を持っていれば、クエリの主キーを変更して別のデータを元に戻すことができるというリスクがあります。

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

「コントロールやデータベースのプロパティが...ありますか?」適切にこのデータを検証する第

  1. 、あなたは攻撃者が彼だけが追加を許可された主キーを提供していることを確認しているように、アプリケーション・レベルのコントロールを配置する必要があります。たとえば、リモートクライアントに値を与えないなど、これを行うことができます。あなたはおそらく、要求全体のセッションにそれを保持することができます。

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

  3. 正当な問題のクラス全体を適切に解決するには 私は一般にアクセス制御を隠すフィルタを作成します。信頼できないデータのソースはリモートの攻撃者ではなくデータベースです。

この場合、クエリ1は「Jane Doe」を検索し、彼女のfoo IDを取得します。クエリ2は、ID = Janeのfoo IDの別の場所を検索します。 IDは最初のデータベースクエリに由来します。データには "DATABASE"と呼ばれる要塞の旗を掲げるでしょう。あなたとあなたのセキュリティ監査人は、この情報源を信頼することができます。または、ハッカーが悪意のあるデータを隠してアプリの転用を意図した別の場所と見なすこともできます。私は知らないだろう。

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

+0

私の答えはすごく残念です。アクセス制御:データベースは非常に単純な脆弱性パターンですが、緩和を適用するのは簡単ではありません。 –

0

ユーザーからの直接的なものであれば、要塞はあなたに警告します。しばしば偽陽性です。 Fortifyは、ユーザー入力は配列のような別のソースから検証する必要があると予想しています。

これを修正するには、ユーザー入力の検証機能を含むカスタムdllを作成します。ユーザーパラメータを直接データベースレイヤに渡さないでください。カスタムdllを使用してこれらの入力を検証します。それは100%働くでしょう。