83 votes

Le caractère "&" casse les mots de passe stockés dans le fichier web.config

J'ai une application ASP.NET MVC3 C# .NET qui tourne sur IIS 7.5.

Nous avons un compte de service Windows NT que nous personnifions dans notre code afin de lire/écrire des documents sur un partage de fichiers. L'identifiant de l'utilisateur est compilé dans le code et le mot de passe du compte de service est stocké dans le fichier web.config.

Le mot de passe contient une esperluette (c'est-à-dire : p&ssword ).

Cela a cassé le site. Lors de l'accès au site, nous avons reçu l'erreur suivante : "Désolé, une erreur s'est produite lors du traitement de votre demande".

Voici le code qui utilise le mot de passe :

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

Pourquoi cela entraînerait-il une interruption du site ?

157voto

Rui Jarimba Points 3243

Je soupçonne que vous n'avez pas codé correctement le mot de passe dans le fichier web.config dossier. N'oubliez pas que web.config est un fichier XML, les entités doivent donc être encodées.

Au lieu de

my&password 

essayer

my&password

Vous pouvez utiliser des sites tels que FreeFormatter.com pour échapper/échapper les chaînes de caractères XML.

61voto

Kelsey Points 26456

Vous devrez mettre la valeur encodée dans le web.config. Elle sera lue correctement une fois que vous l'aurez extraite, mais dans le fichier de configuration lui-même, elle doit être encodée.

eg :

Mot de passe : your&password (ce que vous attendez)

Version codée : your&password (ce qui devrait être stocké dans votre web.config)

Votre méthode d'encapsulation qui lit la valeur devrait la décoder automatiquement en your&password .

Vous devrez procéder de la même manière pour tous les caractères "spéciaux" :

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

-1voto

Scott Selby Points 4808

Stocker le mot de passe dans le web.config en utilisant CDATA

remplacer le mot de passe par ceci

<![CDATA[MyPassw&rd]]>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X