【问题标题】:The "&" character breaks passwords that are stored in the web.config“&”字符会破坏存储在 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
    );

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

【问题讨论】:

标签: c# asp.net .net asp.net-mvc configuration


【解决方案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

您需要对所有“特殊”字符执行此操作:

< = &lt;
> = &gt;
" = &quot;
' = &apos;
& = &amp;

【讨论】:

  • 我正在使用 VS2015 where &或 &两个结果相同,即“&”但我想要“&”
  • 谢谢。在 VS2017+ 中运行良好
【解决方案3】:

使用 CDATA 将密码存储在 web.config 中

用这个替换密码

<![CDATA[MyPassw&rd]]>

【讨论】:

  • 不起作用:您不能将 CDATA 部分放在属性值中。
  • Joe 是正确的,这不能在配置文件中用作属性值
  • @user99513 提示:如果您同意某人的评论,您可以点赞他/她的评论,而不是写一条新评论,只提及您同意之前的评论者。
  • 我完全同意@user1451111
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2014-05-22
相关资源
最近更新 更多