ConnectionString密码 - XML转义

时间:2015-02-26 13:47:57

标签: c# xml

我有一个强密码,我将它放在我的web.config上有一些麻烦:

所以我的web.config条目是:

<add name="MyConnectionString" connectionString="Data Source=tcp:xxxxxx.database.windows.net,1433;Initial Catalog=MyDatabase;MultipleActiveResultSets=true;User ID=xxxxxx@xxxxxxxx;Password=MyPassword" providerName="System.Data.SqlClient" />

我的强密码是:

  

&LT =#} U} 2 {P ^ 07&GT; 7u10)'* G7 | 5 = 96; a1F2 =“=!} 7;!65 \ 3 {9P0w(#/] $ {06 | S   / L2 = 1 {0 [2E32 + 78AJ | @; 9} $ N = |(0s9,= \ N | O +吨

所以问题与某些需要转义的角色有关,但我试图用单引号来逃避它。

由于

3 个答案:

答案 0 :(得分:2)

允许系统为您处理:

Console.WriteLine(
    new XElement("add",
        new XAttribute("name","MyConnectionString"),
        new XAttribute("connectionString",
            new SqlConnectionStringBuilder {
                DataSource="tcp:xxxxxx.database.windows.net,1433",
                InitialCatalog="MyDatabase",
                MultipleActiveResultSets=true,
                UserID="xxxxxx@xxxxxxxx",
                Password=Console.ReadLine()
            }
        ),
        new XAttribute("providerName","System.Data.SqlClient")
    )
);

答案 1 :(得分:1)

  

我试图用单引号

来逃避它

这实际上并没有逃脱任何事情 - 它只是允许你将双引号作为价值的一部分。但是这意味着你不能将撇号作为你价值的一部分...将两者转变为实体表示可能更简单......以及{{1} }和<

所以在这种情况下你想要:

&

如果您的原始密码中包含&lt;=#}U}2{p^07>7u10)&apos;*g7|5=96!;a1F2=&quot;=!,}7;65\3{9P0w(#/]${06|S /L2=l{0[2E32+78AJ|@;9}$N=|(0s9,=\N|o+t ,则必须将其转换为&

或者为了更简单,当您生成密码时,强制它有任何需要转义的字符。 (或者转移到不同的身份验证模型,当然......)

或者按照PetSerAl的答案以编程方式提出这个问题。

答案 2 :(得分:1)

同意@PetSerAl您应该使用高级API为您创建XML。但是,如果您必须手动格式化XML文本,SecurityElement类可以使用实用程序来转义和取消XML文本:

        string password = @"<=#}U}2{p^07>7u10)'*g7|5=96!;a1F2=""=!,}7;65\3{9P0w(#/]${06|S /L2=l{0[2E32+78AJ|@;9}$N=|(0s9,=\N|o+t";

        var xmlText = System.Security.SecurityElement.Escape(password); // Escape invalid XML characrers.

        var passwordBack = new System.Security.SecurityElement("tag", xmlText).Text;  // Unescape them again.

        Debug.Assert(passwordBack == password); // No assert