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

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 19 heures et 3 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 21 heures et 36 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39