Avoir un fichier Web.config sécurisé


Par les temps qui courent, un développeur qui désire une application sécurisée ... doit être un peu parano si il veut penser à tout...Indifferent

Dans le cas, d'une application Web, la liste des fondamentaux en matière de sécurité, peut être très longues...

  • Validation des entrées (injection de code SQL)
  • Sécurité au niveau des champs cachés (visible par le code source)
  • Sécurité au niveau Ajax (des failles sont encore exploitable)
  • Sécurité au niveau Cookies
  • Gestion de l'application si l'on essaye de vous envoyer 10000 requêtes d'un coup.
  • Cryptage des données sensibles
  • Gestion des pools
  • ....etc...

Bref, la liste des tâches à vérifier peut être très rapidement rébarbatif.


Je vais pour l'instant vous faire une check-list de ce qu'un Web.config sécurisé devrait contenir :

Un web.config sécurisé devrait suivre ces recommandations :

  • les connectionStrings doivent être cryptées en utilisant aspnet_regiis.exe .
  • toutes les sections de configurations contenant des user credentials ou des données sensibles doivent être cryptées en utilisant aspnet_regiis.exe. 
  • L'élément Trace doit être désactivée de l'application et customErrors mode doit être à "On", car l'utilisateur ne doit pas voir de détail sur les exceptions levées par le CLR.
  • Les balises d'autorisation doivent être convenablement configurées avec la liste des roles,users ou verbs devant être "allow" ou "deny".
  • l'Impersonation doit être désactivé si non requise.
  • L'objet Session doit être désactivé si non utilisé.
  • un niveau de confiance (Trust level) est appliqué à votre application et il ne doit pas authorisé plus de droits que ceux requis par votre application.

Afin de crypter une donnée dans votre Web.config

Vous pouvez utiliser la syntaxe suivante de l'utilitaire aspnet_regiis se trouvant dans le framework:

  • aspnet_regiis -pef connectionStrings "c:\MyWebSite"

cela remplacera vos paramètres :

<connectionStrings>
<add name="PricingConnectionString" providerName="System.Data.SqlClient" connectionString="Data Source=18.254.45.95;Initial Catalog=PricingDev;Persist Security Info=True;Max Pool Size=1000;User ID=toto;Password=monmpwd;"/>
<add name="StartConnectionString" providerName="System.Data.OracleClient" connectionString="Server=STARTLIGHT;Uid=tata;Pwd=monmpwd"/>
 </connectionStrings>

 par :

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"><EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"xmlns="http://www.w3.org/2001/04/xmlenc#"> .... </KeyInfo> <CipherData> <CipherValue>pRHtzDzZICRStiEvb01laj3OkuaxFe3ip9fE0n5s76fKMveYCqp5F48CwIkmwQcMzaqDXdsOGN6oGHssfIH8BHuL9SC4nNaKcq+7AoguLalb5YUesnfa/xUhUoX1hZ8WILfekV/KMGcHuH39Q+sFCec+VPodyhBgTB8Tu7fa8F0=</CipherValue>
</
CipherData>
</
EncryptedKey></KeyInfo>
<
CipherData>
<
CipherValue>rfu++wRIW2FgvbzEPPqB6DRRgfEw6sLwX97fD6qj4YHCYekHu568mMQY+7kZCljdFIJbUGDlHDCtLKPk8piwdoxPJOobMuNiUG5eLpwcsPX3mUTrD7cRBMcYSy16qQLs9jnYrdzcf6rq9Y0/EFZrm1z/fesG/2eBHES2lq4ItdaQGhvUoJrv30VnLfSMpF63Gwli0aF/5Qig9e9d8BZlwRU7GsqvIy/vDCvmdAfgRN143oy16Y0yU6njl8stZruR0pvVrJRcEPzqctiOu2vdYemRpdFjM47l4Xt7ne4Jx9ER8q9W/IhUOIutUndEVVgqbRZ8D0RPj5WLFq8Gt4ZgO8RhGChz6crFuox0+lhx5mQicQpN5x1lySBeSDRJMk/u1UwmFWSKo6CrjS4QKc2U+/fekdf1rJMRVnyZZSx7rZNAsNg+cqMr5atD895pfAVFfdtYCs0VS+ud5AyahpGWUAI+CSDc6FvIOjCUgiK3uQOw7H6d+HDd9IvWhIxKYtEjz+gtZAec7Jk8Dbh9L7q6aaONXV8vGMBP2L56mHMYufBfZKT1XgmhdqXN4Wni7V6n</CipherValue>
</
CipherData>

...

</

connectionStrings>

Attention la clé utilisée pour le cryptage est liée à la machine, donc si vous exportez le fichier Web.config sur un autre poste cela ne marchera pas.

Crypter toujours sur le serveur hébergeant l'application Web !

Lors de l'éxécution, ASP.NET décryptera lui même la chaîne de connexion.

si vous désirer décrypter le fichier manuellement lancer alors la commande ci-dessous :

  • aspnet_regiis -pdf connectionStrings "c:\MyWebSite"
Publié vendredi 5 octobre 2007 16:17 par NetDim
Classé sous
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- [WF4] Passage d’arguments Literal, VisualBasicValue ou LambdaValue? par Blog de Jérémy Jeanson le il y a 47 minutes

- [RIA Services] Include et DomainDataSource par Blog Technique d'Audrey PETIT le il y a 12 heures et 11 minutes

- ZUNE : Version ZUNE Software V 4.2 et la socialisation par Blog Technique de Romelard Fabrice le il y a 13 heures et 36 minutes

- Pratique de Silverlight par Eric Ambrosi par Blog de Frédéric Queudret le il y a 15 heures et 43 minutes

- Apprendre à développer pour les mobiles avec la nouvelle génération .NET par Perspective le il y a 16 heures et 59 minutes

- ZUNE : Nouvelle version du ZUNE Software – V 4.2 par Blog Technique de Romelard Fabrice le il y a 17 heures et 24 minutes

- Nouveau système d'aide pour Visual Studio 2010 : pour ceux qui n'apprécient pas trop l'absence d'index... par CoqBlog le 03-20-2010, 20:05

- L'interface naturelle de Windows Phone 7 Series par Perspective le 03-20-2010, 18:49

- Comment mapper une vue SQL sur une collection de complex type? par Matthieu MEZIL le 03-19-2010, 21:05

- SQL Server : Query Notification ou comment être notifié de modifications de données côté application (SqlDependency) par SQL Server vu par Christian Robert le 03-19-2010, 15:06