4

簡単な質問です。接続文字列をソース コードにプレーン テキストで保存するのはよくない考えだと思います。Ildasm.exe などのツールを使用して逆コンパイルし、その後接続文字列を表示できるからです。しかし、App.config を使用する方が安全なのはなぜですか。 ?

確かに、この構成ファイルは実行可能ファイルのすぐそばにあるため、誰かが逆コンパイルのために実行可能ファイルにアクセスできる場合、構成ファイル、つまり接続文字列にもアクセスできます。

私の質問は、App.config がコード内よりも接続文字列を保存するためのより安全な場所である理由は何ですか?

4

3 に答える 3

3

設定ファイルで任意の情報を保護できます。ウォークスルーへのこのリンク:保護された構成を使用した構成情報の暗号化方法の説明

更新:リンク切れで申し訳ありませんが、更新して記事のタイトルを追加します。解決策は、RsaProtectedConfigurationProviderを使用することです。WebUtilityヘルパークラスで簡単なメソッドを作成しました。

public static void CheckWebConfigSecured(string webPath, params string[] sections)
{
    Configuration confg = WebConfigurationManager.OpenWebConfiguration(webPath);
    bool done = false;
    foreach (string section in sections)
    {
        ConfigurationSection confSection = confg.GetSection(section);
        if ((confSection != null) && !confSection.SectionInformation.IsProtected)
        {
            confSection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
            done = true;
        }
    }
    if (done)
    {
        confg.Save();
    }
}

Application_BeginRequestでGlobal.asax.csから呼び出します

WebUtility.CheckWebConfigSecured(
    context.Request.ApplicationPath,
    "connectionStrings",
    "appSettings",
    "log4net");

ここで、 connectionStringsappSettings、およびlog4netは、保護したいweb.configセクションです。

結果として、サーバー上のWeb.configファイルのこれらのセクションは、展開後に最初にサイトにアクセスした後、次の例のようになります。

<appSettings configProtectionProvider="RsaProtectedConfigurationProvider">
  <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
    xmlns="http://www.w3.org/2001/04/xmlenc#">
    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
          <KeyName>Rsa Key</KeyName>
        </KeyInfo>
        <CipherData>
          <CipherValue>YbjvJF6IpTaEFb58ag1O ... HJm1uzA=</CipherValue>
        </CipherData>
      </EncryptedKey>
    </KeyInfo>
    <CipherData>
      <CipherValue>mzJ2PoteOG7ZpAs922sounmG ... 02D3ZiM1PCliSw==</CipherValue>
    </CipherData>
  </EncryptedData>
</appSettings>
于 2012-11-28T14:09:15.793 に答える
0

接続文字列をリテラル文字列のコードに格納すると、バイナリが難読化されていない限り、単純な 16 進エディターを使用して、コンパイルされたバイナリから簡単に取得できます。

App.config は必ずしもより安全ではありませんが、クリア テキストよりもはるかに安全な App.config 内の情報を暗号化するオプションがあります。

App.config は、ファイル システムの ACL レベルでも保護できます。これはセキュリティを補完できますが、通常はホスト サーバー管理者がファイルへのアクセス許可を持っているため、常に実用的であるとは限りません。

于 2012-11-28T14:26:16.417 に答える
0

接続文字列をクリア テキストのままにしておくと、App.config 自体は安全ではなくなります。ただし、構成ファイルの一部を暗号化すると、セキュリティが向上します。

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

http://www.codeproject.com/Articles/18209/Encrypting-the-app-config-File-for-Windows-Forms-A

アプリケーション フォルダー内のファイルに接続文字列を保存したくない場合は、暗号化されたレジストリ キーに接続文字列を保存することもできます。

于 2012-11-28T14:08:24.163 に答える