El carácter “&” rompe las contraseñas que están almacenadas en web.config

Tengo una aplicación ASP.NET MVC3 C # .NET que se ejecuta en IIS 7.5.

Tenemos una cuenta de servicio de Windows NT que suplantamos en nuestro código para leer / escribir documentos en un recurso compartido de archivos. La identificación del usuario se comstack en el código y la contraseña de la cuenta de servicio se almacena en el archivo web.config.

La contraseña contiene un carácter “y” comercial (es decir, p&ssword ).

Esto rompió el sitio. Al acceder al sitio, recibimos este error: “Lo sentimos, se produjo un error al procesar su solicitud”.

Aquí está el código que usa la contraseña:

  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 ); 

¿Por qué esto causaría que el sitio se rompiera?

Sospecho que no codificaste correctamente la contraseña en el archivo web.config . Recuerde que web.config es un archivo XML, por lo que las entidades deben estar codificadas.

En lugar de

 my&password 

tratar

 my&password 

Puede usar sitios como FreeFormatter.com para escapar / quitar las cadenas XML.

Necesitará poner el valor codificado en web.config. Lo leerá correctamente una vez que lo extraiga, pero en el propio archivo de configuración debe codificarse.

p.ej:

Contraseña: your&password (lo que esperas)

Versión codificada: your&password (lo que debe almacenarse en su web.config)

Su método de envoltura que lee el valor debería descodificarlo automáticamente a your&password .

Tendrá que hacer esto para todos los caracteres “especiales”:

 < = < > = > " = " ' = ' & = & 

almacenar la contraseña en el web.config usando CDATA

reemplazar la contraseña con este