web-dev-qa-db-fra.com

"Curl -u nom d'utilisateur: mot de passe http://example.com" est-il sécurisé?

curl -u username:password http://example.com est-il sécurisé?

Sinon, pouvez-vous expliquer brièvement comment quelqu'un pourrait obtenir votre mot de passe?

30
JDiMatteo

C'est dangereux, car cURL utilise par défaut l'authentification de base où le protocole HTTP envoie votre mot de passe en texte clair. Lorsque vous spécifiez la chaîne username:password, elle est convertie en chaîne BASE64 dans l'en-tête HTTP:

GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Toute personne pouvant intercepter votre trafic HTTP (votre fournisseur, toute personne accédant au même point d’accès sans fil que vous, etc.) pourra récupérer le mot de passe simplement en utilisant un convertisseur BASE64 en ligne .

Le protocole HTTPS améliorera les choses en établissant une connexion cryptée avant l'envoi de cet en-tête, empêchant ainsi la divulgation du mot de passe. Toutefois, cela ne s'applique que si l'utilisateur est attentif lorsqu'il lui est demandé de confirmer des certificats inconnus, d'autoriser des exceptions de sécurité, etc.

Notez que les arguments de commande peuvent être disponibles pour d'autres utilisateurs sur le même ordinateur, par exemple. ps -ef, système de fichiers/proc, dans votre historique bash et dans votre journal de terminal (merci pour le commentaire de @ Lambert qui l'a noté). CURL sur certaines plates-formes tente de masquer le mot de passe. Par exemple, avec ps -ef, vous risquez de voir un espace vide au lieu d’un mot de passe. Cependant, au lieu de passer le mot de passe en tant qu'argument de ligne de commande, il est préférable de demander directement à cURL Demander un mot de passe, comme indiqué dans la FAQ cURL .

54
Dmitry Grigoryev

Ce n'est pas sécurisé. Les paramètres de ligne de commande sont visibles pour tous les utilisateurs.

24
Tronic

Cela pourrait être fait de manière plus sûre en utilisant le paramètre --netrc-file.

  1. Créer un fichier avec 600 autorisations

Par exemple: vi/root/my-file

exemple de machine.com

nom d'utilisateur connexion

mot de passe MOT DE PASSE

Enregistrez et fermez le fichier

  1. Utilisez ce qui suit pour accéder à l'URL avec nom d'utilisateur et mot de passe.

curl --netrc-file/root/my-file http://example.com

  1. Terminé
1
Shameer

Ce n'est pas sûr lorsque vous utilisez un schéma HTTP. Pour le sécuriser, vous devez utiliser HTTPS.

Pour que le mot de passe n'apparaisse pas dans l'historique des commandes, indiquez uniquement le nom d'utilisateur. Curl demandera un mot de passe, s'il n'est pas fourni dans la commande.

0
Mohnish

La réponse courte est non ... mais ....

S'il n'y a pas d'options côté serveur, vous pouvez renforcer la sécurité.

  1. S'il s'agit d'un intranet local, isolez le domaine de diffusion et n'utilisez ni le WiFi ni la radio.
  2. Comme le dit Shameer, utilisez un fichier .netrc, conservez les valeurs hors du code.
  3. Si vous pensez que la mémoire est en sécurité, utilisez des vars environnementaux. $ PSWD.
  4. Si c'est de l'automatisation, lancez-le depuis la crontab de root.
  5. ... dans un conteneur.
  6. ... depuis un VM avec un disque crypté.

Aucun de ceux-ci n'est moins sécurisé qu'un navigateur utilisant HTTP.

0
mckenzm