La manière la plus sûre de transmettre des informations d'identification à curl est d'être invité à les insérer. C'est ce qui se passe lorsque vous transmettez le nom d'utilisateur comme suggéré précédemment (-u NOM_UTILISATEUR
).
Mais que se passe-t-il si vous ne pouvez pas transmettre le nom d'utilisateur de cette manière? Par exemple, le nom d'utilisateur pourrait avoir besoin de faire partie de l'URL et seul le mot de passe de faire partie d'une charge utile json.
tl;dr: Voici comment utiliser curl en toute sécurité dans ce cas:
read -p "Nom d'utilisateur : " U; read -sp "Mot de passe : " P; curl --request POST -d "{\"password\":\"${P}\"}" https://exemple.com/login/${U}; unset P U
read
demandera à la fois le nom d'utilisateur et le mot de passe à partir de la ligne de commande, et stockera les valeurs soumises dans deux variables qui peuvent être référencées dans les commandes ultérieures et enfin supprimées.
Je vais expliquer pourquoi les autres solutions ne sont pas idéales.
Pourquoi les variables d'environnement ne sont-elles pas sûres
- La manière d'accéder et la modalité d'exposition du contenu d'une variable d'environnement ne peuvent pas être suivies (ps -eww) car l'environnement est implicitement disponible pour un processus.
- Les applications récupèrent souvent l'intégralité de l'environnement et le journalisent à des fins de débogage ou de surveillance (parfois dans des fichiers journaux en texte clair sur le disque, notamment après un crash d'application).
- Les variables d'environnement sont transmises aux processus enfants (ce qui va à l'encontre du principe du moindre privilège).
- Les maintenir pose un problème : les nouveaux ingénieurs ne savent pas qu'elles existent et ne sont pas au courant des exigences les entourant - par exemple, de ne pas les transmettre aux sous-processus - car elles ne sont pas appliquées ou documentées.
Pourquoi est-il dangereux de le taper directement dans une commande en ligne de commande Parce que votre secret finit alors par être visible par tout autre utilisateur exécutant ps -aux
puisque cela liste les commandes soumises pour chaque processus en cours d'exécution. Aussi parce que votre secret finit par figurer dans l'historique de bash (une fois que le shell se termine).
Pourquoi est-il dangereux de l'inclure dans un fichier local Les restrictions d'accès strictes POSIX sur le fichier peuvent atténuer le risque dans ce scénario. Cependant, c'est toujours un fichier sur votre système de fichiers, non chiffré au repos.