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
);
なぜこれがサイトを破壊するのでしょうか?
web.config
ファイルでパスワードを適切にエンコードしていないと思われます。 web.config
はXMLファイルであるため、エンティティをエンコードする必要があることに注意してください。
の代わりに
my&password
試してみる
my&password
FreeFormatter.com などのサイトを使用して、XML文字列をエスケープ/エスケープできます。
エンコードされた値をweb.configに配置する必要があります。プルすると、正しく読み取られますが、構成ファイル自体にエンコードする必要があります。
例えば:
パスワード:your&password
(あなたが期待するもの)
エンコードされたバージョン:your&password
(web.configに保存するもの)
値を読み取るラッパーメソッドは、自動的にyour&password
にエンコード解除する必要があります。
すべての「特殊」文字に対してこれを行う必要があります。
< = <
> = >
" = "
' = '
& = &
cDATAを使用してweb.configにパスワードを保存します
パスワードをこれに置き換えます
<![CDATA[MyPassw&rd]]>