Pouvez-vous passer utilisateur / passe pour l’authentification HTTP de base dans les paramètres d’URL?

153

Je crois que ce n'est pas possible, mais quelqu'un que je connais a insisté pour que cela fonctionne. Je ne sais même pas quels paramètres essayer, et je ne l'ai trouvé nulle part documenté.

J'ai essayé http://myserver.com/~user=username&password=mypassword mais cela ne fonctionne pas.

Pouvez-vous confirmer qu'il n'est en fait pas possible de transmettre l'utilisateur / passer via des paramètres HTTP (GET ou POST)?

ripper234
la source
@sam - quoi? A quoi ressemblerait l'URL complète?
ripper234
4
Tout dans la spec ietf.org/rfc/rfc1738.txt (3.1)
Smudge
@ Sam - Désolé, je n'ai pas réussi à analyser votre commentaire pour une raison quelconque.
ripper234

Réponses:

200

Il n'est en effet pas possible de transmettre le nom d'utilisateur et le mot de passe via des paramètres de requête dans une autorisation HTTP standard. Au lieu de cela, vous utilisez un format d’URL spécial, comme ceci: http://username:[email protected]/- cela envoie les informations d’identification dans l’en-tête HTTP "Autorisation" standard.

Il est possible que votre interlocuteur ait pensé à un module personnalisé ou à un code qui examine les paramètres de la requête et vérifie les informations d'identification. Ce n'est pas une autorisation HTTP standard, cependant, c'est une chose spécifique à l'application.

femme
la source
1
Merci, c’est justement ce que je cherchais ... il n’est pas essentiel que ce soit des paramètres GET, mais seulement que je puisse l’adapter à l’URL.
ripper234
42
Pour votre information, le http://username:[email protected]format n'est plus pris en charge ni par IE, ni par Chrome , ne seriez pas surpris si d'autres suivaient, s'ils ne l'avaient pas déjà fait.
TJ Crowder
11
Fonctionne bien dans Chrome. Seul IE est un gamin gâté.
Damien Overeem ツ
1
@DamienOvereem sur quelle version de chrome êtes-vous? je suis sur mac os x 37 et cela ne semble pas fonctionner pour moi
Chris DaMour
11
Depuis, j'ai appris que Chrome l'avait désactivée pendant un certain temps, mais qu'elle avait été réactivée ultérieurement. J'ai également appris que Safari commettrait des erreurs de phishing en cas d'exécution de ce type de liens. Le temps de l'authentification http à base d'URL est essentiellement révolu.
Damien Overeem
18

Passer les paramètres d'authentification de base dans l'URL n'est pas recommandé

Il existe un champ d’entête Authorization à cet effet, cochez-le ici: http header list

Comment l'utiliser est écrit ici: Authentification d'accès de base

Vous pouvez également y lire que même s’il est toujours pris en charge par certains navigateurs, la solution suggérée consistant à ajouter les informations d’autorisation d’autorisation de base dans l’URL n’est pas recommandée.

Lisez également le chapitre 4.1 de la RFC 2617 - Authentification HTTP pour plus de détails sur les raisons pour lesquelles NE PAS utiliser l'authentification de base.


Passage des paramètres d'authentification dans une chaîne de requête

Lorsque vous utilisez OAuth ou d'autres services d'authentification, vous pouvez souvent également envoyer votre jeton d'accès dans une chaîne de requête plutôt que dans un en-tête d'autorisation. Par exemple:

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD
Se flétrir
la source
Et comment encode-t-on un en-tête d'autorisation dans une URL?
Womble
2
N'est-ce pas que le formulaire que vous avez déclaré était maintenant obsolète?
womble
2
La question à laquelle vous avez répondu "Il existe un champ d'en-tête d'autorisation à cette fin" demandait comment définir des paramètres d'authentification dans l'URL . Si vous ne pouvez pas encoder les champs d'en-tête HTTP dans une URL (ce que vous ne pouvez pas), votre réponse est non séquentielle.
womble
Pouvez-vous citer où, dans la norme URI, il est déconseillé de transmettre des paramètres d’authentification de base dans URI? La RFC 2396 dit seulement que c'est "NON RECOMMANDÉ" parce que les détails de l'authentification en texte brut ne sont, dans de nombreuses circonstances, pas une bonne idée (avec laquelle je suis d'accord), alors que la RFC 7235 ne mentionne rien. Nulle part dans les spécifications que je peux rechercher ne dit que cela est obsolète.
Lie Ryan
1
@Wilt: Je dois m'excuser, vous avez effectivement raison. Votre suggestion selon laquelle la spécification a été "modifiée" m'a incité à approfondir mon enquête (une RFC n'est jamais modifiée une fois publiée / numérotée). Je viens de constater que la RFC 2396 a en fait été remplacée par la RFC 3986 , que je n’étais pas capable de trouver plus tôt. La RFC 3986 mentionne la dépréciation de nom d'utilisateur: syntaxe de mot de passe:Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan
17

http: // nom d'utilisateur: [email protected] fonctionnera pour FireFox, Chrome, Safari MAIS pas pour IE.

Base de connaissances Microsoft

Girish Kumar
la source
2
Cette fonctionnalité a été supprimée de Chrome 19+. Voir code.google.com/p/chromium/issues/detail?id=123150
Moshe Katz
4
À la lecture de ce rapport de bogue, il a été rajouté dans Chrome 20. Certes, je m'attendrais à voir beaucoup de plaintes se poursuivre à ce sujet s'il ne l'avait pas été.
Womble
Je l’ai maintenant demandé pour Internet Explorer: connect.microsoft.com/IE/feedback/details/873575/… . Cas d'utilisation légèrement différent, mais abordant le même problème;)
SimonSimCity
@Diago si le mot de passe contient '@' alors il ne fonctionne pas. cela donne une erreur fatale, quelqu'un peut-il me dire comment donner un nom d'utilisateur et un mot de passe à la fois
Ashish Jain
@AshishJain - Je voudrais essayer d'échapper le @dans le mot de passe en tant que %40. (Je ne sais pas si cela fonctionne, cependant, et cela peut dépendre du serveur ou de la combinaison navigateur / serveur.)
David Moles
0

Il est (évidemment) possible d'envoyer n'importe quelle chaîne dans les paramètres de GET, bien qu'il ne soit pas recommandé d'envoyer un identifiant et un mot de passe, car cela peut le rendre très visible, surtout s'il ne s'agit pas d'une requête AJAX.

Cependant, vous devrez ensuite coder la page du serveur pour extraire le nom d'utilisateur et le mot de passe, puis les valider et les utiliser de la manière requise.

Steve Smith
la source