2009-03-12 9 views

Répondre

-2

À moins que je ne me trompe, IIS ne servira pas le fichier Web.Config. Si vous craignez que les gens ne le tirent du web, je suis sûr que vous pouvez bloquer ce fichier d'Apache.

Si vous parlez de la sécurité locale, je ne pense pas qu'il existe une "bonne" façon de le faire. Dites que vous avez un mot de passe dans votre Web.Config la seule façon de crypter correctement ceci est d'exiger un autre mot de passe pour déchiffrer le fichier. Donc, essentiellement, puisque (je suppose), vous devez accéder au fichier par programmation, en vous déplaçant simplement là où vous stockez vos mots de passe, de Web.Config au code source ou à un autre fichier externe, ce qui ne vous apporte rien . Toutes les autres méthodes de chiffrement qui ne nécessitent pas de mot de passe pour déchiffrer obscurcissent simplement le fichier, mais sont assez susceptibles d'être cachées.

Lisez cet article sur Pidgin (anciennement gaim) stocker des mots de passe localement http://developer.pidgin.im/wiki/PlainTextPasswords. En outre this article wikipedia sur les clés de cryptage pourrait être utile. Les deux discusse les limites inhérentes de security through obscurity. Essentiellement, si vous verrouillez le fichier localement, utilisez la sécurité basée sur le compte d'utilisateur pour le faire, c'est-à-dire limiter l'accès en lecture/écriture au fichier.

+0

Je données plutôt confidentielles à chiffrer au lieu de texte clair dans le fichier de configuration. – CSharpAtl

+0

Bien, mais ce que je dis, c'est que vous ne cryptez pas vraiment, sauf si vous devez entrer manuellement un mot de passe chaque fois que votre application est lancée. –

+0

Je ne suis pas le chiffrement pour l'utilisateur web, je ne veux pas que quelqu'un sur la boîte pour voir/manipuler les données que j'ai dans le fichier. – CSharpAtl

0

Vous pouvez le faire en utilisant le programatically System.Configuration.ConfigurationManager pour obtenir un objet ConfigurationSection et appeler SectionInformation.ProtecteSection (« DataProtectionConfigurationProvider ») sur elle

/// <summary> 
    /// Encrypts a Config section from the given Configuration object 
    /// </summary> 
    /// <param name="sectionKey">Path to the section to Encrypt</param> 
    /// <param name="config">Configuration</param> 
    public static void EncryptConfigSection(String sectionKey, Configuration config) 
    { 
     ConfigurationSection section = config.GetSection(sectionKey); 
     if (section != null) 
     { 
      if (!section.SectionInformation.IsProtected) 
      { 
       if (!section.ElementInformation.IsLocked) 
       { 
        section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 
        section.SectionInformation.ForceSave = true; 
        config.Save(ConfigurationSaveMode.Full); 
       } 
      } 
     } 
    } 

pour la configuration Web, vous devez utiliser le système .Web.Configuration.WebConfigurationManager pour obtenir l'objet Configuration que vous pouvez ensuite passer à la fonction ci-dessus. Notez que pour les fichiers web.config, seules certaines sections sont cryptables.

Il faut aussi savoir que si les paramètres sont stockés dans les AppSettings alors tout le monde peut écrire une application simple qui, lorsqu'il est exécuté sur votre serveur peut récupérer les valeurs de texte brut des paramètres à condition qu'ils connaissent les noms de vos paramètres.

Découvrez l'article suivant par Jon Galloway sur les alternatives à chiffrer simplement la section AppSettings: http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx

+0

De @ alexandre-domingos le commentaire: Je voulais ajouter que 'DataProtectionConfigurationProvider', au moment de ce commentaire, n'est pas supporté par Mono, et que vous devriez utiliser' RSAProtectedConfigurationProvider' à la place sur la méthode 'ProtectSection'. – AlBlue