web-dev-qa-db-ja.com

「&」文字は、web.configに保存されているパスワードを中断します

IIS 7.5。で実行されているASP.NET MVC3 C#.NETアプリケーションがあります。

ドキュメントをファイル共有に読み書きするために、コード内で偽装するWindows NTサービスアカウントがあります。ユーザーIDはコードにコンパイルされ、サービスアカウントのパスワードはweb.configファイルに保存されます。

パスワードにアンパサンド文字が含まれています(つまり:p&ssword)。

これはサイトを壊しました。サイトにアクセスすると、次のエラーを受け取りました。「申し訳ありませんが、リクエストの処理中にエラーが発生しました」。

パスワードを使用するコードは次のとおりです。

    var password = ConfigurationManager.AppSettings.Get(Common.SVC_PWD);

    bool isSuccess = LogonUser(
        @"my_svc_acct",
        "my.domain.net",
        password,
        LOGON32_LOGON_NEW_CREDENTIALS,
        LOGON32_PROVIDER_DEFAULT, ref token
    );

なぜこれがサイトを破壊するのでしょうか?

56
MikeTWebb

web.configファイルでパスワードを適切にエンコードしていないと思われます。 web.configはXMLファイルであるため、エンティティをエンコードする必要があることに注意してください。

の代わりに

my&password 

試してみる

my&password

FreeFormatter.com などのサイトを使用して、XML文字列をエスケープ/エスケープできます。

106
Rui Jarimba

エンコードされた値をweb.configに配置する必要があります。プルすると、正しく読み取られますが、構成ファイル自体にエンコードする必要があります。

例えば:

パスワード:your&password(あなたが期待するもの)

エンコードされたバージョン:your&password(web.configに保存するもの)

値を読み取るラッパーメソッドは、自動的にyour&passwordにエンコード解除する必要があります。

すべての「特殊」文字に対してこれを行う必要があります。

< = &lt;
> = &gt;
" = &quot;
' = &apos;
& = &amp;
42
Kelsey

cDATAを使用してweb.configにパスワードを保存します

パスワードをこれに置き換えます

<![CDATA[MyPassw&rd]]>
0
Scott Selby