juin
2007
On connait les fichiers de configuration d’application (app.config) (si non, patience, dans la future version de la FAQ C++/CLI, il y a aura 2-3 entrées sur ce sujet).
Il est très pratique d’y stocker les informations de configuration de l’application. Il peut être tentant d’y stocker par exemple des informations sensibles (un login/mot de passe, ou une chaine de connexion de base de données par exemple).
Cependant, ces informations doivent être distribuées avec l’exécutable et donc librement consultable sous format XML.
Comment faire pour utiliser ce principe de configuration tout en conservant une sécurité adéquate ?
Plusieurs solutions viennent à l’esprit, comme d’implémenter un système de cryptage, à l’aide d’une clé d’encryption, comme par exemple grâce à l’algo de rijndael. Ceci implique d’avoir une méthode qui encrypte et qui décrypte les informations.
On peut également utiliser un mécanisme prévu par le framework.net pour un système d’encryption automatique en RSA.
Pour ce faire, on va déplacer l’écriture de la configuration dans le fichier machine.config. En utilisant toujours appsettings, ouvrez le fichier machine.config et si la section n’existe pas, créez la ainsi :
<add key="login" value="nico"/>
<add key="pwd" value="abcd"/>
</appSettings>
Pour lire ces informations, on peut utiliser ce bout de code :
String ^login = "";
String ^pwd = "";
if (section->Settings["login"] != nullptr)
login = section->Settings["login"]->Value;
if (section->Settings["pwd"] != nullptr)
pwd = section->Settings["pwd"]->Value;
Console::WriteLine("Login : {0} - Mot de passe : {1}", login, pwd);
Voilà, on sait lire dans le machine.config grace à la méthode statique OpenMachineConfiguration.
Vous me direz : « oui, mais les informations sont toujours visibles dans le machine.config, et mon superbe et original mot de passe « abcd » n’est pas si secret que ca ».
Certes, mais nous n’avons pas terminé.
Lancez la commande :
aspnet_regiis.exe -pe "appSettings" -pkm
On se retrouve avec un fichier machine.config, dont la section appSettings ressemble désormais à ca :
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>mCMSEOwI/sofISqaMxpaRM53IsBizjlBfsSzDAkzrGihm41P6R072FdkTkurkKBmyMjsXAI5oXlwYno7Ob8jws5i75yOjYWcy6y+uqEDTwfgIFt4kguVpEPbMlo6iR3dC0ipwmk0Eoz/TenDnSCt/e+cmO2FEQXfqYulNRq9bDA=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>TE6AddoMEjIwcAPi/mF0BBZHXfN2DZbaXzqK3SajSlv++HvGGdBohgRPCboO69d5PLxPo3NjgMB5rEzqiGL49CTeapUtfNAzffa1owXzAjzQJnH/2WP3nrRci8qLhzOUYU3urGokAbN1zwiGY2adkA==</CipherValue>
</CipherData>
</EncryptedData>
</appSettings>
Un peu moins compréhensible, vous ne trouvez pas ?
Et ce qui est très pratique, c’est que sans aucune modification de code, mon application va être capable de déchiffrer cette section, et retrouver mon mot de passe par exemple.
Relancez l’application, et le tour est joué.
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007