web-dev-qa-db-fra.com

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

J'ai une application ASP.NET MVC3 C # .NET s'exécutant sur IIS 7.5.

Nous avons un compte de service Windows NT que nous empruntons 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 un caractère et commercial (c'est-à-dire: p&ssword).

Cela a cassé le site. En accédant 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 provoquerait-il la cassure du site?

56
MikeTWebb

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

Au lieu de

my&password 

essayer

my&password

Vous pouvez utiliser des sites tels que FreeFormatter.com pour échapper/libérer les chaînes XML.

106
Rui Jarimba

Vous devrez mettre la valeur encodée dans le fichier web.config. Il le lira correctement une fois que vous l'aurez tiré, mais il devra être encodé dans le fichier de configuration lui-même.

par exemple:

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

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

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

Vous devrez le faire pour tous les caractères "spéciaux":

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

stocker le mot de passe dans le fichier web.config à l'aide de CDATA

remplace le mot de passe par cette

<![CDATA[MyPassw&rd]]>
0
Scott Selby