81

IIS7.5でASP.NETMVC3C#.NETアプリケーションを実行しています。

ファイル共有に対してドキュメントの読み取り/書き込みを行うために、コードで偽装したWindowsNTサービスアカウントがあります。ユーザー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
    );

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

4

3 に答える 3

153

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

それ以外の

my&password 

試す

my&password

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

于 2013-01-30T15:45:51.817 に答える
61

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

例えば:

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

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

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

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

< = &lt;
> = &gt;
" = &quot;
' = &apos;
& = &amp;
于 2013-01-30T15:47:03.380 に答える
-1

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

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

<![CDATA[MyPassw&rd]]>
于 2013-01-30T15:49:30.420 に答える