81

我有一个在 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
    );

为什么这会导致网站崩溃?

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 回答