17

私のチームが現在開発しているアプリケーションには、すべてのデータベース アクセスを実行するために使用される DLL があります。データベースはファイアウォールの内側にあり、ドメイン サーバーはそうでないため、アプリケーションは信頼できる接続を使用できません。そのため、接続文字列には DB ユーザー名とパスワードが必要なようです。現在、DLL にはデータベース接続文字列がハード コードされていますが、アセンブリを逆アセンブルすることができ、ユーザー名とパスワードが公開されているため、起動時にこれを実行したくありません。

要件の 1 つは、パスワードを数か月に 1 回変更する必要があることです。そのため、これを内部ユーザー ベースにロールアウトする必要があります。

暗号化されたパスワードを、アセンブリに保存せずにユーザー ベース全体に簡単に配布できる方法で保存する方法はありますか?

更新: 回答してくれたすべての人に感謝します。いくつかの質問にお答えします... データ DLL は、ASP.NET WebForms と VB.NET WinForms の両方で使用されます。アプリケーションが独自の構成ファイルを持つことができることは理解していますが、DLL の構成ファイルについては何も見ていません。残念ながら、職場で Jon Galloway の投稿にアクセスできないため、それが機能するかどうかは判断できません。開発の観点から、Web サービスを社内で使用したくはありませんが、来年中にサードパーティに提供する可能性があります。ファイアウォールを介してユーザーを認証できないため、なりすましは機能しないと思います。ユーザー (または以前のユーザー) が攻撃者になる可能性があるため、私たちはそれを誰からも遠ざけています!

4

8 に答える 8

10

確かではありませんが、構成ファイルに入れて構成ファイルを暗号化できると思います。

更新: こちらの Jon Galloway の投稿を参照してください

于 2008-08-08T16:38:34.513 に答える
3

悪意のある人が設定ファイルから資格情報を取得すると想定してください。これは、彼らがあなたのデータベースにログインして、そのユーザーができることは何でもできることを意味します。したがって、ユーザーがテーブルに直接アクセスするなどの悪いことをできないようにしてください。そのユーザーが特定のストアドプロシージャのみを実行できるようにすると、より良い状態になります。これは、sprocsが輝く1つの場所です。

于 2008-08-25T05:12:51.047 に答える
1

言いたくないのですが、クライアント マシンに何かを配置するとすぐに、そのデータのセキュリティが失われます。

プログラムがその文字列を解読しようとしている場合、攻撃者が同じことをできると想定する必要があります。プログラムにデバッガーをアタッチするのも 1 つの方法です。

接続文字列をサーバーに保存し、Web 接続を介してそれを取得するのは良いことのように思えますが、その Web 接続にもセキュリティが必要であることに気付くまでは、攻撃者があなたのプログラムになりすまして Web 接続に話しかける可能性があります。

質問させてください。接続文字列を隠しているのは誰ですか? ユーザーまたは攻撃者?ユーザーの場合、なぜですか?

于 2008-08-08T17:12:58.750 に答える
0

.NET は、このような構成値の暗号化をサポートしています。構成ファイルに残すことができますが、暗号化されています。

于 2008-08-08T17:30:27.623 に答える
0

すべてのセットアップ情報を構成可能な場所に置いて DLL を配布できるようにしたいのですが、何かカスタムを行わない限り、DLL 用の便利な .NET 構成ファイルを 1 つ持つことはできません。

DLL が持つべき責任を再考する必要があるかもしれません。ライブラリのユーザーが接続文字列を渡すことを要求することは可能ですか、または意味がありますか? DLL が構成ファイルを読み取ることは本当に理にかなっていますか?

于 2008-08-08T17:40:28.227 に答える
0

アプリが ASP.NET アプリの場合は、web.config.

アプリが複数のコンピューターで実行されているクライアント アプリケーションである場合は、接続文字列をローカルに保存するのではなく、Web サービスまたはその他の種類の安全なメカニズムを使用して一元的に保存することを検討してください。これにより、将来の更新が容易になり、接続文字列をローカルに保存しなくなります。

ほんの少しの考え。

更新: @ lassevk

「接続文字列をサーバーに保存し、Web 接続を介してそれを取得するのは良いことのように思えますが、その Web 接続にもセキュリティが必要であることに気付くまでは、攻撃者があなたのプログラムになりすまして Web 接続に話しかける可能性があります。 "

Web サービスのセキュリティは暗黙的でした。展開のタイプに応じて、クライアント側の証明書など、多数のオプションがあります。

于 2008-08-08T16:44:30.180 に答える
0

他にもいくつかのアイデアがあります。偽装はいつでも使用できます。また、エンタープライズ ライブラリ (共通ライブラリ) を使用することもできます。

<section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<enterpriseLibrary.ConfigurationSource selectedSource="Common">
<sources>
  <add name="Common" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    filePath="Config\Exception.config" />
</sources>

于 2008-08-08T17:28:06.130 に答える
0

いくつかのオプション:

  1. web.config に保存して暗号化する
  2. dll に格納して難読化 (dotfuscator)
  3. 1つをweb.configに保存し(もちろん暗号化)、データベースに残ります(複数使用する必要があり、暗号化/復号化が面倒になる場合)
于 2009-04-14T14:20:44.570 に答える