“&”字符会破坏存储在 web.config 中的密码
Posted
技术标签:
【中文标题】“&”字符会破坏存储在 web.config 中的密码【英文标题】:The "&" character breaks passwords that are stored in the web.config 【发布时间】:2013-01-14 12:00:00 【问题描述】:我有一个在 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 被视为 XML 文档 - 请参阅此处***.com/questions/3824351/… 我的第一个猜测是配置文件中的密码不正确。但是您是否尝试过调用 GetLastError (msdn.microsoft.com/en-us/library/windows/desktop/…) 来查看错误是什么?我还必须补充一点,在配置文件中存储明文密码不是一个好主意。我至少会对其进行加密。 【参考方案1】:我怀疑您没有在web.config
文件中正确编码密码。请记住,web.config
是一个 XML 文件,因此必须对实体进行编码。
代替
my&password
试试
my&password
您可以使用诸如FreeFormatter.com 之类的网站来转义/取消转义 XML 字符串。
【讨论】:
每个人如何使用它的 URL 小心!带有“&”的网址不是带有“&”的 URL。在将其应用于您的 URL 地址之前,请不要忘记用代码替换它。在找到原因之前,我陷入了这个陷阱并处理了一整天的错误。【参考方案2】:您需要将编码值放入 web.config。拉取后它会正确读出,但在配置文件本身中需要对其进行编码。
例如:
密码:your&password
(你所期望的)
编码版本:your&password
(应该存储在您的 web.config 中)
读取值的包装器方法应自动将其解编码为your&password
。
您需要对所有“特殊”字符执行此操作:
< = <
> = >
" = "
' = '
& = &
【讨论】:
我正在使用 VS2015 where &或 &两个结果相同,即“&”但我想要“&” 谢谢。在 VS2017+ 中运行良好【参考方案3】:使用 CDATA 将密码存储在 web.config 中
用这个替换密码
<![CDATA[MyPassw&rd]]>
【讨论】:
不起作用:您不能将 CDATA 部分放在属性值中。 Joe 是正确的,这不能在配置文件中用作属性值 @user99513 提示:如果您同意某人的评论,您可以点赞他/她的评论,而不是写一条新评论,只提及您同意之前的评论者。 我完全同意@user1451111以上是关于“&”字符会破坏存储在 web.config 中的密码的主要内容,如果未能解决你的问题,请参考以下文章
Azure 存储帐户防火墙规则适用于表但会破坏 blob 存储
为啥 Spring 批处理多线程步骤会破坏 ItemProcessor 中的其他存储库休眠查询?