web-dev-qa-db-ja.com

SQL Serverの既定のASP.NETメンバーシップとロールプロバイダーはどの程度安全ですか?

私はこれらがどのように機能するかについて非常に基本的な考えを持っています。自分で作成するのではなく、ユーザー管理システムが必要なときに何度も使用しました。しかし、これらを実動システムに使用する必要がありますか? Windowsユーザーアカウントは、アクティブ化前に新しいユーザーを検証する小規模なユーザーベースを前提として、実際にはデータベーステーブルのこれらのアカウントよりも多くのセキュリティを提供しますか?

もちろん、このシステムは私が書いたものよりも安全だと思いますが、私が取るべき強化策や、はるかに優れたサードパーティのプロバイダーはありますか?

8
Peter Smith

それらがどれほど安全であるかは、あなたが防御したいものとあなたが防御したいものに完全に依存しています。同僚の販売記録を見たい内部の従業員に対する防御は、顧客情報を盗もうとする外部の攻撃者とは異なります。これは、独自のデザインを盗もうとする政府に対する防御とは異なります。

一般的に言えば、これらのプロバイダーは、パスワードのソルティング、ハッシュアルゴリズムの変更などを可能にする(暗号化されていないものも含む)などの基本的な推奨事項に従っているため、安全ではありません。ただし、SQLへの接続が安全であることを確認するなどの構成の問題、POSTへの資格情報がSSL経由である、またはセッションCookieがSSL経由で保護されている、データベース自体は安全です。

比較すると、Windows Authにも同様の問題があり、インターネットでWindows Authを使用するのが面倒になるため、セキュリティ境界の問題が発生します。

理論では、Active Directoryストアは通常のSQL Serverデータベースよりも安全ですが、実際には、それを使用しているすべてがパブリックWebサイトでのユーザー認証である場合、非常に安全ではない可能性があります。おそらく、企業のADほどうまく扱われていません。繰り返しになりますが、企業のADも適切に処理されていない可能性があります(一般的に、あなたのケースでは必ずしもそうではありません)。

SQLデータベースはSQLインジェクション攻撃を受けやすく、Active DirectoryストアはWindows固有の攻撃を受けやすい傾向があります。 SQLデータベースは、IDの無秩序な増加につながる傾向があります...複数のデータベースに広がる複数のアプリケーションの複数のユーザーアカウント。 Active Directoryは一元化されたアカウントをリードします。どちらが良いか悪いかは、あなたが達成しようとしていることに依存します。

独自のプロバイダーを作成することは、.NETに組み込まれているプロバイダーが持っているのとは異なり、公の審査を受けていないため、通常はお勧めできません。サードパーティのプロバイダーも同じ基本的な問題に直面します。彼らはどのようにテストされましたか?

そして、これにより、なぜアプリケーションに認証自体を処理させるのかという疑問が生じます。たぶん、クレームベース認証を介して他の人にそれを行わせる方が良いでしょう。これは、Google、Facebook、Windows Liveなどの別のシステムにリスクを押し込みます。

3
Steve