En 2018, GitHub a célébré la barre des 100 millions de dépôts open source. Depuis, la plateforme n’a cessé de se développer. Comment veiller à ce que vos données sensibles, notamment vos identifiants et vos jetons d’authentification, ne soient pas publiquement accessibles ?
Sélection de contenu connexe :
Vous souhaitez savoir comment ne pas divulguer vos clés API et autres données importantes ? Découvrez les réponses dans cet article.
Comment les informations sensibles sont-elles révélées ?
Imaginons que je crée un script pour une application qui accède à des données à l’aide d’un appel d’API. Par exemple, ce script vise à extraire les données météorologiques d’OpenWeatherMap :
GET “https://api.openweathermap.org/data/2.5/weather?&id=5128581&appid={YOUR API KEY}”
Une pratique courante consiste à stocker une clé API (votre secret) dans une variable et à l’enregistrer dans le même fichier que le script, une méthode qui a l’avantage de faciliter et d’accélérer les tests. Voici un exemple basé sur Python et une fausse clé API :
# app.py api_key = "12abc3d45ef6789012345g6789h0ij12" city_id = "5128581" base_url = "https://api.openweathermap.org/data/2.5/weather?" final_url = base_url + "appid=" + api_key + "&id=" + city_id
Pourquoi divulguer ces données est-il un problème ?
Lorsque le code est envoyé vers un dépôt GitHub public, tout le monde a accès à votre clé API. À l’exception de quelques utilisateurs privilégiés au sein de votre organisation, ce jeton d’accès privé ne devrait jamais être divulgué à quiconque.
Problèmes supplémentaires liés à la divulgation de la clé API :
- Il existe un risque de violation du contrat de licence qui vous lie à votre fournisseur d’API.
- Vos adversaires peuvent voler et utiliser votre clé pour effectuer des appels d’API rapides hors du cadre établi par votre licence, ce qui peut inciter votre fournisseur d’API à réduire vos demandes.
- Plus important encore, si votre clé API privée donne accès à des données sensibles, par exemple vos informations de connexion à votre compte de stockage cloud, il s’agit tout simplement d’une incitation pour les attaquants.
Comment sécuriser vos données sensibles ?
Comment masquer vos clés API à l’aide de Python ou d’un autre langage dans GitHub ? En réalité, la solution est simple. Il suffit de configurer le fichier qui contient les clés API (et d’autres données sensibles), qui est inclus dans d’autres fichiers de code lorsque cela est nécessaire, mais qui est exclu du contrôle de version (p. ex., gitignore). Votre application fonctionne ainsi comme il se doit tout en évitant que des informations sensibles, notamment vos identifiants de connexion, ne soient envoyées vers un dépôt GitHub.
Si l’on reprend l’exemple précédent, nous pouvons créer un deuxième fichier que nous appellerons config.py pour stocker le code nécessaire afin d’accéder à notre clé API. Il suffit ensuite de changer la chaîne de caractères dans le fichier app.py pour récupérer la clé API à partir du fichier config.py plutôt que de l’assigner directement à une variable :
# config.py api_key = “12abc3d45ef6789012345g6789h0ij12” # app.py import config city_id = “5128581” base_url = "https://api.openweathermap.org/data/2.5/weather?" final_url = base_url + "appid=" + config.api_key + "&id=" + city_id
Pour éviter que le fichier config.py ne soit envoyé vers GitHub, vous n’avez qu’à l’ajouter au fichier gitignore :
# .gitignore config.py
Lors de l’envoi vers GitHub, seuls les fichiers app.py et .gitignore seront transférés vers le référentiel public. Notre fichier config.py qui comprend toutes nos informations sensibles ne sera pas accessible sur GitHub.
Éliminer des données sensibles déjà envoyées vers GitHub
Si votre dépôt inclut des informations sensibles que vous auriez envoyées auparavant, suivez le Guide GitHub pour éliminer ces données de votre référentiel.
Conclusion
Solution simple en apparence, il s’agit pourtant d’une bonne pratique très utile chaque fois que vous devez gérer des identifiants. Je n’assigne d’ailleurs jamais d’informations de connexion sécurisées à une variable, à moins que le fichier soit exclu du contrôle de version.
En fonction des normes de votre organisation, vous devriez peut-être également appliquer cette règle à votre système de contrôle de version autohébergé. En général, il est toujours conseillé de savoir exactement où les informations de connexion sensibles sont stockées. Les inclure dans le contrôle de version constitue rarement une bonne pratique, peu importe que votre système soit hébergé en local ou en ligne.
FAQ
Dois-je masquer mes clés API ?
Les clés API secrètes ne devraient jamais être visibles dans le code côté client. Elles devraient être masquées. Toutefois, des clés API en lecture seule ne constituent aucun risque si vous les copiez dans le code JavaScript exécuté par votre navigateur.
Les clés API doivent-elles être stockées dans un dépôt Git ?
L’envoi de clés API vers des dépôts Git publics ou privés pose un risque de divulgation d’informations. Si vous choisissez néanmoins cette option, veillez à chiffrer vos données sensibles avec git-remote-gcrypt, git-secret ou git-crypt.
Comment dotenv peut-il vous aider à masquer vos clés API ?
Dotenv est un module qui charge des variables d’environnement à partir du fichier .env dans la variable globale process.env. Pour faire simple, cela permet de rendre votre clé API invisible dans le code.
