App.configで接続文字列の暗号化に問題があります。 app.configのconnectionStringsセクションを保護するコードがありますが、パスワードはプレーンテキストで表示されたままです。
接続文字列を暗号化して、展開時にプレーンテキストではないようにする必要があります。 web.configについてはSOでよく似た質問がありますが、app.configではありません。
この記事 をご覧ください。非常に便利な例があります。あなたは基本的にここであなたを助けるためにSystem.Configuration.SectionInformation.ProtectSection
を探しています。
App.configの名前をweb.configに変更し、aspnet_regiisツールで暗号化してからapp.configに名前を変更するだけで、web.configと同じソリューションを簡単に適用できます。
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config>
(フォルダーレベルで停止し、末尾の「\」を入れないでください)これをメモ帳で開いて、暗号化されたファイルを表示できます。 Visual Studioでは、復号化されていることがわかります。接続文字列は、暗号化されていない場合と同じ方法で使用できます。
config
ファイルの場所を定義する
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
connectionStrings
を暗号化する場合
config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);
アプリの設定部分に注意する必要があります
AppSettings
を暗号化する場合
config.AppSettings.SectionInformation.ProtectSection(Nothing);
これを自動化する方法:
ProjectSettings>コンパイル> BuildEvents>ビルド後の編集
以下のコードを貼り付けます:
SET ApplicationName=YourAppWithoutExtention
echo.
echo POST BUILD ACTIONS
echo ====================
if EXIST web.config (
echo Deleting web.config
DEL web.config
)
echo Renaming %ApplicationName%.exe.config to web.config
REN %ApplicationName%.exe.config web.config
echo Running aspnet_regis against webconfig
SET rpath=%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "$(TargetDir)
SET rpath=%rpath:~0,-1%"
echo Path: %rpath%
%rpath%
echo Renaming web.config to %ApplicationName%.exe.config
REN web.config %ApplicationName%.exe.config
echo Done.
「YourAppWithoutExtention」をアプリ名に置き換えます。
その後、ビルドするたびにapp.configが自動的に暗号化されます。
•App.config file to web.config<br>
の名前を変更します。•管理者としてコマンドプロンプトを実行します。
encryptの場合:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings"
引用符で囲まれたプロジェクトの場所と-prov "DataProtectionConfigurationProvider"
例:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "D:\location\location1\location" -prov "DataProtectionConfigurationProvider"
復号化の場合:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings"
引用符内のプロジェクトの場所。
例:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "D:\location1\location"
エラーの場合:
これを構成xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0"
に追加します
このような:
•最後に、web.config
の名前をApp.Config
に変更します
さらに、webファームで接続文字列を暗号化および復号化したい人がいる場合の手順は次のとおりです。
RSAキーを作成します:aspnet_regiis -pc "MyKeys" -exp
このキーへのアプリケーションプールIDのアクセスを許可:aspnet_regiis -pa "MyKeys" "IIS AppPool\ApplicationPoolName" -full
RSAプロバイダーをweb.configに追加します:<configuration> <configProtectedData> <providers> <add name="MyProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="MyKeys" useMachineContainer="true" /> </providers> </configProtectedData> </configuration>
RSAプロバイダーを使用してweb.configを暗号化します:aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"
注:単一サーバーのシナリオで行ったような代替構文を使用できます。例:ASPNET_REGIIS -pef "connectionStrings" "D:\inetpub\wwwroot\applicationFolder" -prov "MyProvider"
aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri
aspnet_regiis -pi "MyKeys" "c:\keys.xml"
ソース: 接続文字列を暗号化および復号化する方法