web-dev-qa-db-fra.com

L'authentification d'accès de base est-elle sécurisée?

En utilisant Apache, il est assez simple de configurer une page qui utilise l'authentification d'accès de base pour demander à un utilisateur un nom/mot de passe et utiliser ces informations d'identification d'une certaine manière pour accorder l'accès à cet utilisateur.

Est-ce sécurisé, en supposant que la connexion entre le client et le serveur est sécurisée?

49
Nathan Osman

Le souci d'authentification de base est que les informations d'identification sont envoyées en texte clair et sont vulnérables au reniflement de paquets.Si cette connexion est sécurisée à l'aide de TLS/SSL, elle est aussi sécurisée que les autres méthodes qui utilisent le cryptage.

55
Chris Diver

Ceci est un vieux fil, et je ne pense pas que la réponse la plus votée/choisie soit correcte.

Comme indiqué par @Nateowami, le thread d'échange de pile de sécurité décrit un certain nombre de problèmes avec l'authentification de base.

J'aimerais en souligner un autre: si vous effectuez correctement la vérification de votre mot de passe, l'authentification de base rend votre serveur plus vulnérable au déni de service. Pourquoi? Autrefois, il était communément admis que le hachage salé était suffisant pour la vérification du mot de passe. Ce n'est plus le cas . De nos jours, nous disons que vous devez avoir des fonctions lentes pour empêcher le forçage brut des mots de passe dans le cas où la base de données est exposée (ce qui arrive trop souvent). Si vous utilisez l'authentification de base, vous obligez votre serveur à effectuer ces calculs lents à chaque appel d'API, ce qui ajoute une lourde charge à votre serveur. Vous le rendez plus vulnérable au DoS simplement en utilisant ce mécanisme d'authentification daté.

Plus généralement, les mots de passe ont une valeur plus élevée que les sessions: la compromission d'un mot de passe utilisateur permet de détourner indéfiniment le compte de l'utilisateur, sans parler de la possibilité de détourner d'autres systèmes auxquels l'utilisateur accède en raison de la réutilisation des mots de passe; tandis qu'une session utilisateur est limitée dans le temps et limitée à un seul système. Par conséquent, pour des raisons de défense en profondeur, les données de grande valeur comme les mots de passe ne doivent pas être utilisées de manière répétée si cela n'est pas nécessaire. L'authentification de base est une technologie datée et doit être déconseillée.

15
TheGreatContini

La raison pour laquelle la plupart des sites préfèrent OAuth à Basic Auth est que Basic Auth oblige les utilisateurs à saisir leur mot de passe dans une application tierce. Cette application tierce doit stocker le mot de passe en texte clair. La seule façon pour révoquer l'accès, l'utilisateur doit modifier son mot de passe. Cela révoquerait toutefois l'accès pour toutes les applications tierces. Vous pouvez donc voir quel est le problème ici.

D'autre part, OAuth nécessite un cadre Web. Un utilisateur entre ses informations de connexion sur la page de connexion de ce site particulier lui-même. Le site génère ensuite un jeton d'accès que l'application peut utiliser pour s'authentifier lui-même à l'avenir.

  • un jeton d'accès peut être révoqué
  • l'application tierce ne peut pas voir le mot de passe de l'utilisateur
  • un jeton d'accès peut recevoir des autorisations particulières (alors que l'authentification de base traite chaque consommateur de la même manière).
  • si une application tierce s'avère non sécurisée, le fournisseur de services peut décider de révoquer tous les jetons d'accès générés pour cette application particulière.
4
elslooo

L'authentification de base sur http dans un environnement qui peut être reniflé ne ressemble à aucune authentification, car le mot de passe peut être facilement inversé puis réutilisé. En réponse au commentaire sarcastique ci-dessus à propos des cartes de crédit sur SSL qui sont "un peu" plus sécurisées, le problème est que l'authentification de base est utilisée maintes et maintes fois sur le même canal. Si vous compromettez le mot de passe une fois, vous compromettez la sécurité de chaque transaction sur ce canal, pas seulement un seul attribut de données.

Si vous saviez que vous transmettriez le même numéro de carte de crédit sur une session Web encore et encore, j'espère que vous trouveriez un autre contrôle en plus de simplement compter sur SSL, car il est probable qu'un numéro de carte de crédit utilisé cela sera souvent compromis ... éventuellement.

1
phydroxide

Si vous générez des mots de passe avec htpasswd envisagez de passer à htdigest.

L'authentification Digest est sécurisée même sur des connexions non cryptées et c'est tout aussi facile à configurer. Bien sûr, l'authentification de base est correcte lorsque vous passez en SSL, mais pourquoi prendre le risque alors que vous pourriez tout aussi facilement utiliser l'authentification Digest?

0
jwsample