“&”字符会破坏存储在web.config中的密码
我有IIS 7.5上运行的ASP.NET MVC3 C#.NET应用程序。
我们有一个Windows NT服务帐户,我们模拟在我们的代码为了读/写文件到文件共享。 用户标识编译在代码中,服务帐户密码存储在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之类的网站来转义/ unescape XMLstring。
您将需要将编码值放在web.config中。 一旦你把它拉出来,它会正确地读出来,但在configuration文件本身,它需要进行编码。
例如:
密码: your&password
(您所期望的)
编码版本: your&password
(应存储在您的web.config中)
读出该值的包装方法应自动将其解码为your&password
。
您需要为所有“特殊”字符执行此操作:
< = < > = > " = " ' = ' & = &
使用CDATA将密码存储在web.config中
用这个replace密码
<![CDATA[MyPassw&rd]]>