Voici un exemple de demande que nous pouvons adresser à l'API GitHub:
curl 'https://api.github.com/authorizations' --user "USERNAME"
Cela vous demandera le mot de passe du compte, pour continuer:
Enter Host password for user 'USERNAME':
Si nous ne voulons pas recevoir l'invite, nous pouvons fournir le mot de passe en même temps que le nom d'utilisateur:
curl 'https://api.github.com/authorizations' --user "USERNAME:PASSWORD"
Mais cette méthode est-elle moins sûre? curl
envoie-t-il toutes les données à la fois, ou configure-t-il d'abord une connexion sécurisée, puis envoie-t-il seulement les USERNAME
et PASSWORD
?
Concernant la connexion il n'y a pas de différence: le TLS est négocié en premier et la requête HTTP est sécurisée par le TLS.
Localement, cela peut être moins sûr, car:
~/.bash_history
) dans le cadre de la commande. Remarque: Cela peut être évité en ajoutant un espace devant la commande avant de l'exécuter (à condition que vous ayez le paramètre ignorespace
dans la variable HISTCONTROL
).ps
, top
et autres, ou en lisant /proc/$pid/cmdline
, tant que la commande est en cours d'exécution.Mais cette méthode est-elle moins sûre?
Non, ce n'est pas le cas si vous utilisez https
. Lorsque vous utilisez HTTPS
, votre transaction complète sera cryptée. Mais comme @Esa l'a mentionné, il n'est pas sécurisé localement, vous pouvez éviter d'ajouter un space
avant votre commande afin que la commande ne soit pas dans votre historique de commandes. Si vous craignez d'exposer la commande aux autres utilisateurs ps
plutôt que de durcir /proc
vous aiderait. Suivez le lien pour activer hidepid .
curl
envoie-t-il toutes les données en même temps, ou configure-t-il d'abord une connexion sécurisée, puis envoie-t-il seulementUSERNAME
etPASSWORD
?
Non curl
n'envoie pas toutes les données en même temps. Comme les autres SSL/TLS
connexion, curl
initiera une négociation SSL
avant de transmettre des données.
Vous pouvez inspecter la façon dont vos données sont transférées avec tcpdump
, tshark
ou Wireshark
comme suit, (après avoir exécuté tcpdump/tshark
, exécutez la commande curl
)
[~ # ~] tcpdump [~ # ~]
[root@arif]# tcpdump -i eth0 -n src Host 192.168.1.1 and dst Host 192.168.1.2 and port 443 -XX
Où,
-i
: pour écouter sur une interface spécifique qui est dans ce cas eth0
src Host
: Spécification de l'adresse source ip
dst Host
: Spécification de l'adresse de destination ip
port
: spécification du port 443
qui est la valeur par défaut pour la connexion SSL
. Vous pouvez changer selon vos besoins.XX
: pour afficher l'en-tête, le contenu des paquets et l'en-tête de niveau lien en HEX et ASCII.Vous commencerez à voir le contenu de gibberish
après quelques paquets. Vous pouvez également grep
votre mot de passe à partir du paquet avec la commande suivante,
[root@arif]# tcpdump -li eth0 -n src Host 192.168.1.1 and dst Host 192.168.1.2 and port 443 -XX | grep 'password'
Si votre mot de passe apparaît, votre mot de passe n'a pas été crypté avant la transmission. Sinon, ça va.
[~ # ~] tshark [~ # ~]
[root@arif]# tshark -O tls "ip src 192.168.1.1 and ip dst 192.168.1.2" -x
Où,
-O
: pour mentionner le protocole.-x
: pour voir le contenu des paquets.vous pouvez également grep
votre mot de passe avec la commande ci-dessus.
La meilleure façon de se protéger des utilisateurs locaux est d'utiliser un fichier ".netrc". La page de manuel curl
doit contenir des détails sur son utilisation.