8

LANを介して別のマシン上のSQLServerに接続するASP.NET4.0Webアプリケーションがあります。これを行うには、Web.configに格納されているConnectionString(SQL Server認証を使用)を使用します。基本的に、これはかなり伝統的なWebサーバーからSQLへの戦略です。

しかし、私たちのクライアントの1人は、この戦略は安全ではないと主張しています。このクライアントは、別のWebサービスレイヤーを介してのみSQLServerに接続する必要があると言っています。

このクライアントを満足させるためだけにこのアプリを書き直したくはありません。私は彼に何を言うべきですか?私がこれに最もよく反論する方法を知っている人はいますか?

前もって感謝します...

4

8 に答える 8

11

セキュリティは常にトレードオフです。クライアントは本当に何を恐れていますか?

データベースクレデンシャルを「明確に」持っていますか?監査人がこれを潜在的な脆弱性として指摘しているのを見てきましたが、実際には、誰かがWebサーバーを侵害した場合、データベースに対して任意のコードを実行する可能性があるため、データベースのクレデンシャルを暗号化してもそれほど多くは購入できません。

Webアプリは、最小限の権限のユーザーを使用してデータベースに接続する必要があるため、Webサーバーを侵害すると、データの読み取りと更新の権限のみが付与されます。すべてがWebサービス層を通過した場合、それはどのように変化しますか?繰り返しになりますが、Webサービス層に移行することにより、複雑さとパフォーマンスに非常に現実的なコストがかかります。そのコストがそれだけの価値があるかどうかを答えることができるのはクライアントだけです。

于 2012-04-26T18:39:00.020 に答える
3

これがWebプロジェクトの場合、ユーザーを実行しているIISサーバーをドメインユーザーに変更し、そのユーザーにSQLサーバーのアクセス許可を与える必要があります。以下のように、接続文字列でSSPIを使用できます。このように、web.configでユーザー名やパスワードを明確に保持する必要はありません。

<configuration>
  <system.web>
    <identity impersonate="true"/> 

  </system.web>

とあなたのconnectionString

"Integrated Security=SSPI;Initial Catalog=TestDb;Data Source=10.10.10.10"

于 2012-04-26T18:37:44.213 に答える
3

IT プロフェッショナルの仕事に異議を唱える顧客はたくさんいます。それは、インターネットで読んだので、すでに答えを知っているため、自分の病気ではなく薬を求めて医者に行く人がたくさんいるのと同じです。

つまり、彼らはあなたにアプリケーションを構築するように依頼し、IT プロフェッショナルであるあなたは、アプリケーションが期待どおりに機能するかどうかを最もよく知っているはずです。あなたは専門家として、顧客が他にもっと良い場所があると思うなら、そこに行くか、おそらく自分でアプリケーションを構築するべきだと顧客に伝える勇気を持っている必要があります。それは過去に肯定的な結果で行ったことです:)

セキュリティについて おそらく彼らの信頼のために暗号化しweb.configて表示することができますが、実際には何の意味もありません。誰かがサーバーにアクセスできれば、それを解読できます。一方、データベースに侵入したい人は、多くの障壁を通過する必要があります。侵入するのは難しい、おそらく不可能です。別のオプションは、ネットワークまたは IP 範囲などの外部ネットワークからの接続を単純にブロックすることです。これは気にしなくていいと思います。

クロスサイトスクリプティングやそのような一般的な処理を防止するなど、より多くの現実的な懸念事項があります。

于 2012-04-26T18:56:02.163 に答える
1

クライアントが間違っている別の層を導入しても、セキュリティが自動的に向上するわけではありません。

簡単に言うと、データ アクセスに SQL サーバー ロールを使用します。たとえば、組み込みの data_reader ロールと data_writer ロールは、開始するのに適した場所です。アプリケーションに最も適切な最小特権アカウントを常に使用してください。データの読み取りのみが必要な場合は、読み取り専用のアカウントを使用してください。

可能な場合は Windows 認証を使用します。それが不可能な場合は、少なくとも接続文字列を暗号化してください。

私が説明したことを実行する方法の詳細については、http://msdn.microsoft.com/en-us/library/ff650037.aspx#pagpractices0001_dataaccessを参照してください。

于 2012-04-26T19:04:42.373 に答える
1

1 つの可能性は、web.config のセクションを暗号化することです。したがって、Web サーバーに直接アクセスできるユーザーのみがこのセクションを復号化できます。

iisreg-tool を使用してこれがどのように機能するかを次に示します

于 2012-04-26T19:29:14.217 に答える
0

データベースで暗号化接続を有効にして、接続が暗号化されているので完全に安全であることをクライアントに伝えることができますか?

于 2012-04-26T18:30:57.430 に答える
-1

より安全にし、顧客を満足させるために、コンピュータ間でトンネリングを使用できます。

データベースが存在する場所にサーバー トンネリング プログラムをセットアップし、クライアント コンピューターにクライアント トンネリング プログラムをセットアップします。トンネリングを介して 1 台のコンピューターを別のコンピューターに接続すると、トンネリングを介してデータベース接続が行われます。

そして、すべてが安全に交換されます (トンネリングがサポートしている場合は圧縮されます)。

http://en.wikipedia.org/wiki/Tunneling_protocol

http://en.wikipedia.org/wiki/HTTP_tunnel

Ps私は何をするにもトンネリングを介してのみサーバーに接続します。

于 2012-04-26T19:12:44.040 に答える
-2

私はウェブ設定を使うのが好きではありませんでした。レジストリはより安全です。

ベストプラクティスは次のとおりです。

  • レジストリ内の接続文字列の重要な項目を非表示にします
  • レジストリ内のユーザー名、パスワード、サーバー名など、接続内の重要な項目を暗号化します
  • クラスを介してレジストリにアクセスする
  • ページごとに必要な場合にのみ、その場で接続文字列を作成します
  • エラーが発生した場合に接続文字列が表示されないように、すべてのページをエラー処理します
  • 完了したら、必ず接続を閉じてください。メモリリークを回避する
  • 常にDataReaderを閉じてリセットします

追加のセキュリティのために

  • 別のプログラムを作成して接続文字列を作成し、そのプロジェクトをソリューション内のライブラリとして参照できます
  • あなたが本当に安全になりたいのなら、あなたのクライアントは正しいです。DBと通信するdllに情報を送信します。これは大変な作業です

出典:

ScottGuから@http ://msdn.microsoft.com/en-us/library/Aa302406

スケーラビリティ:

スケーラビリティに関して:Webファーム全体でのレジストリキーの作成/編集は、カスタム管理ソフトウェアを使用して非常に簡単に実行できます。

http://weblogs.asp.net/scottgu/archive/2010/09/08/introducing-the-microsoft-web-farm-framework.aspx

最後に、私を反対票を投じたすべての人々に。箱から出してすぐに使えるセキュリティだけでは不十分です。セキュリティは芸術であり、科学ではありません。

ハッカーは、パスワードがデフォルトでどこに保存されているかを知っています......

ASP.NET4.0ファン

Microsoftは、asp.net4.0Webサイトがレジストリ設定を簡単に展開できるようにします。

http://msdn.microsoft.com/en-us/library/dd394698.aspx

于 2012-04-26T19:23:23.127 に答える