2017-01-03 7 views
2

MVC5 & EF6を使用してWebサイトを作成しています。私はまた、このウェブサイトを公開するために共有ホスティングを使用しています。今私が持っている問題は、私の接続文字列がweb.configファイルにプレーンテキストで置かれているということです。私はこれにどのように対処すべきかについての「直接的な」答えを見つけるのは非常に困難な時を過ごしています。共有ホスティングでの接続文字列の保護

this oneなど多くの記事があります。この記事では、web.configのConnectionセクションを暗号化する方法を紹介します。だから私はその例に従い、その例で示したメールセクションを暗号化しようとしました。コードを実行した後、私はweb.configファイル全体が変更されたことに気付きました。

それはこのようなものに使用:

<system.net> 
    <mailSettings> 
    <smtp from="[email protected]"> 
     <network 
     host="mail.Site.com" 
     port="25" 
     userName="[email protected]" 
     password="password" /> 
    </smtp> 
    </mailSettings> 
</system.net> 

今ではこのようなものです:

<mailSettings> 
    <smtp 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>odapFFPDF1Fgsk2wyvbwVC4SNISqhWc9lXiAq+I/OW3wVVqBCPowxyen9M7c9+KUBkXmGSfaUVxDMlqutChv6g6VU8h4TWG3W6Tw/istjfw/UYrRsGguPiOqdvRsl9XLBmnS37v99+VX7FEA9TKb6ufC0a3Defp2MNpGTvTIR20=</CipherValue> 
      </CipherData> 
     </EncryptedKey> 
     </KeyInfo> 
     <CipherData> 
     <CipherValue>lHPPFRJAH2hIm/Ya+ABRMP5mo5rEYwL2aBJQ/DT4Q+1OZXaftutiddxxJZ4LSgw3pzi1QJpU8eOPwFVebvqFVA4cjs27l8Iqz50E/R/tBfS7e2oqdWTRsc8IFfE/xOIieMp22BuFsYEDbgnIbLdbHJnw+92zyt2lUlzJpW9epNpnb29sVQhtNJ9cPjAaYAaU</CipherValue> 
     </CipherData> 
    </EncryptedData> 
    </smtp> 
</mailSettings> 

私の唯一の問題は、今私がしなくても、自分のコード内のこれらの値を読んで行う方法ですコンフィギュレーションファイルを解読して保存します。私はメール設定セクションまたは接続文字列セクションを読む必要があるたびに、webconfigファイルを書き直したくありません。私はこのようなメソッドを持っている場合は

は:

public static string DecryptMailSettings() 
{ 
    var config = WebConfigurationManager.OpenWebConfiguration("~"); 
    ConfigurationSection section = config.GetSection("system.net/mailSettings/smtp"); 
    if (section.SectionInformation.IsProtected) 
    { 
     section.SectionInformation.UnprotectSection(); 
     return section.???; 
    } 
    return "Nothing was read"; 
} 

にはどうすればいいの値は、上記の例から「ホスト」と言うことができます得るのです。ドキュメントから

+0

あなたはあなたの全体のメール設定を暗号化することを選択しました。ユーザー名とパスワードだけを暗号化したいと思うようです。 暗号化からホスト名を解くことができない場合は、単純なアプリケーション設定を追加する必要があります。ホスト名を持つキー値 – DaniDev

+0

@DaniDev暗号化からホスト名を切り離す方法を尋ねています。 – Bojan

+0

私が示唆しているのは、暗号化/復号化が正常に動作していて、ホスト名が「絡み合っていない」ように思えるなら、に値を追加するだけです。このような : <キー=「MAILHOST」値=「mail.Site.com」追加/>を、その後、 – DaniDev

答えて

3

:それはファイルを処理する際

ASP.NETが自動的にWeb.configファイルの内容を復号化します。したがって、他のASP.NET機能で使用するために暗号化された構成設定を復号化したり、コード内の値にアクセスするための追加の手順は必要ありません。私は、暗号化/復号化が正常に動作している場合、それはその「untangling」ホスト名のように思えることを示唆しています

https://msdn.microsoft.com/en-us/library/dtkwfdky.aspx

+0

あなたのコードでそれを他の言葉で、私があれば全体の設定ファイルを暗号化することができることを読んで私はスタートアップ時に、ウェブサイトがその値を読み取ろうとするたびに、余分なロジックを追加することなく、それを最初にすべて解読します。 – Bojan

+0

展開する前に暗号化する必要があります。マニュアルの指示に従ってください。 – JuanR

+0

これは共有ホスティングなので、私はaspnet_regiisを実行できません。このため、私は実行時にコードでこれを行うことを検討しています。それで、私はまだhostnameの値を読むことができなければならないので、自分のメールサービスを設定できるようにする必要があります。私はどのようにその鍵を読むでしょうか?その記事によれば、私はまだそれを最初に解読する必要がある価値を読む。 – Bojan

0

その後、ちょうどあなたのweb.configファイルに付加価値を面倒です。

このように: <appSettings> <add key="MAILHOST" value="mail.Site.com" />, このコードを読んでください。

例:

string HostName = ConfigurationManager.AppSettings["MAILHOST"].ToString(); 
+0

ホスト名は私が選んだランダムな値でしたが、パスワードを調べたいのですが? – Bojan

+0

私は、コード内のパスワードを見たり、読み込んだりするのがよい理由は想像できません。暗号化されたファイルの暗号化を解除する場合は、解読手順に従います。 https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx – DaniDev

+0

解読の例は https:// msdnで提供されています。 microsoft.com/en-us/library/system.configuration.protectedconfigurationprovider.aspx – DaniDev

関連する問題