ASP .NET Core MVC – Sécuriser les informations sensibles dans vos chaines de connexion

Présentation
Les chaînes de connexion contiennent toutes les informations nécessaires permettant de se connecter à des bases de données. Parmi ces informations, peuvent figurer des données sensibles comme un mot de passe … Dans cet article, nous allons mettre en œuvre une solution permettant de protéger les chaînes de connexion, en protégeant ces données sensibles.

Mise en œuvre
Une solution consiste à enregistrer les informations sensibles dans les données secrètes. Les données secrètes sont contenues dans un fichier JSON situé un répertoire local sur le PC sur lequel s’exécute l’application (%Utilisateur%\AppData\Roaming\Microsoft\UserSecrets\…).
Lors de la configuration des services de l’application ASP .NET, après avoir lu la chaîne de connexion contenue dans le fichier de configuration de l’application, le mot de passe est lu dans les données secrètes et dynamiquement ajouté dans la chaîne de connexion.
Ainsi, si une personne accède à la chaîne de connexion dans les sources de l’application, il ne peut se connecter directement à la base de données car le mot de passe est manquant.

Exemple
Après avoir créé une application ASP .NET Core MVC :
1 – Implémentation de la chaîne de connexion
Ajouter un fichier de configuration (appsettings.json) et implémenter une chaîne de connexion. Voici un exemple :

{
  "ConnectionStrings": {
    "CS_DataBase": "Server=Server\\InstanceSql;Database=BaseDonnees;User Id=NomUtilisateur;MultipleActiveResultSets=true"
  }
}

2 – Ajout du mot de passe dans les données secrètes
Après avoir cliqué sur l’élément « Afficher les données secrètes de l’utilisateur » du menu contextuel du projet dans l’explorateur de solution, vous pouvez ajouter un paramètre avec le mot de passe de l’utilisateur se connectant à la basse de données :

{
  "DataBase": {
    "Password": "MotDePasse"
  }
}

3 – Constitution de la chaîne de connexion
Pour créer la chaîne de connexion complète, il est nécessaire de lire la chaine de connexion dans le fichier de configuration, ainsi que le mot de passe. Nous réalisons cette tâche dans la méthode ConfigureServices de la classe Startup:

public class Startup
{

    public IConfiguration Configuration { get; }
    public string ChaineConnexion { get; set; }

    public Startup(IConfiguration configuration)
    {
        this.Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(this.Configuration.GetConnectionString("CS_DataBase"));
        builder.Password = Configuration["DataBase:Password"];
        this.ChaineConnexion = builder.ConnectionString;
    }
}

La propriété Configuration, initialisé dans le constructeur via une injection de dépendance, permet d’accéder aux paramètres de l’application et aux données secrètes. L’instance de la classe SqlConnectionStringBuilder permet d’obtenir une chaîne de connexion valide.

Pour afficher la chaîne de connexion dans le navigateur, modifions la méthode Configure de la classe Startup :

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync($"Chaine de connexion : {this.ChaineConnexion}");
    });
}

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j’alterne les missions de formation et d’ingénierie avec cette plateforme. J’écris ce blog pour transmettre mes connaissances à tout développeur, qu’il soit débutant ou expérimenté.