Чи можете ви передати користувача / пропустити базову автентифікацію HTTP в параметрах URL-адреси?


153

Я вважаю, що це неможливо, але хтось, кого я знаю, наполягав на тому, що це працює. Я навіть не знаю, які параметри слід спробувати, і я не знайшов цього документально ніде.

Я спробував http://myserver.com/~user=username&password=mypassword, але це не працює.

Чи можете ви підтвердити, що фактично неможливо передати користувача / пройти через параметри HTTP (GET або POST)?



@sam - що? Як виглядала б повна URL-адреса?
ripper234

4
Все в специфікації ietf.org/rfc/rfc1738.txt (3,1)
Палець

@sam - Вибачте, мені просто не вдалося проаналізувати ваш коментар чомусь.
ripper234

Відповіді:


199

Дійсно, неможливо передати ім'я користувача та пароль через параметри запиту в стандартному HTTP auth. Натомість ви використовуєте спеціальний формат URL-адреси, як-от так: http://username:password@example.com/- це надсилає облікові дані у стандартному заголовку HTTP "Авторизація".

Можливо, хто б з ким ви не розмовляли, думав про спеціальний модуль або код, який переглядав параметри запиту та перевіряв облікові дані. Це не стандартне авторизація HTTP, однак це специфічна річ.


1
Дякую, це саме те, що я шукав ... Не важливо, що це параметри GET, лише те, що я можу вписати його в URL-адресу.
ripper234

42
FYI, http://username:password@example.comформат більше не підтримується ні IE, ні Chrome , не здивується, якщо інші слідкували за відповідним рішенням, якщо цього ще не зробили.
TJ Crowder

11
Насправді прекрасно працює в Chrome. Тільки IE - це зіпсований брат.
Дамієн Оверем ツ

1
@DamienOvereem, на якій версії хромується ти? я на mac os x 37, і це, здається, не працює для мене
Chris DaMour

11
З того часу я дізнався, що Chrome на деякий час його відключив, але пізніше ввімкнув цю функцію. Я також дізнався, що Safari видаватиме фішинг-помилки під час запуску цих типів посилань. В основному час http-аутентифікації на основі URL закінчився ..
Damien Overeem ツ

18

Не рекомендується передавати основні параметри аутентифікації в URL-адресі

Для цього є поле заголовка авторизації, перевірте його тут: список заголовків http

Як користуватися ним написано тут: Основна автентифікація доступу

Там же ви можете прочитати, що, хоча це все ще підтримується деякими браузерами, пропоноване рішення щодо додавання базових облікових даних авторизації в URL не рекомендується.

Прочитайте також главу 4.1 в RFC 2617 - HTTP-аутентифікація для отримання більш детальної інформації про те, чому НЕ використовувати базову автентифікацію.


Передача параметрів аутентифікації в рядку запиту

Під час використання OAuth або інших служб аутентифікації ви також можете часто надсилати ваш маркер доступу в рядок запиту замість заголовка авторизації, наприклад:

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD

І як можна кодувати заголовок авторизації в URL?
жіноча

2
Чи не те, що форму, яку ви заявили, тепер застаріла?
живіт

2
На питання, на яке ви відповіли, "Існує поле заголовка авторизації для цієї мети", як задати параметри аутентифікації в URL . Якщо ви не можете кодувати поля заголовка HTTP у URL-адресі (що ви не можете), ваша відповідь не є послідовником.
живіт

Чи можете ви навести, де в стандарті URI сказано, що передача основних параметрів аутентифікації в URI застаріла? RFC 2396 говорить лише про те, що це "НЕ РЕКОМЕНДОВАНО", оскільки відомості про автентифікацію в простому тексті в багатьох випадках не є гарною ідеєю (з якою я згоден), тоді як RFC 7235 нічого не згадує. Ніде в специфікаціях, які я не можу шукати, сказано, що це застаріло.
Лже Раян

1
@ Wilt: Я повинен вибачитися, ти справді маєш рацію. Ваш натяк на те, що специфікація була "змінена", підштовхнув мене до подальшого дослідження (RFC ніколи не змінюється після опублікування / нумерації). Щойно я виявив, що RFC 2396 насправді витіснив RFC 3986 , якого я не зміг знайти раніше. RFC 3986 згадує про знецінення імені користувача: синтаксис пароля:Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan

17

http: // ім'я користувача: password@example.com буде працювати для FireFox, Chrome, Safari, але не для IE.

База знань Майкрософт


2
Цю можливість було видалено з Chrome 19+. Дивіться code.google.com/p/chromium/issues/detail?id=123150
Moshe Katz

4
Коли я прочитав цей звіт про помилку, він знову додався в Chrome 20. Звичайно, я б очікував, що побачу чимало продовжуючих скарг на нього, якби не було.
живіт

Тепер я просив його для Internet Explorer: connect.microsoft.com/IE/feedback/details/873575/… . Трохи інший випадок використання, але вирішує ту саму проблему;)
SimonSimCity

@Diago, якщо пароль містить "@", він не працює. це призводить до фатальної помилки. Хто-небудь може сказати мені, як ми можемо дати ім’я користувача та пароль відразу
Ashish Jain

@AshishJain - я б спробував уникнути @пароля як %40. (Я не знаю, чи це працює, але це може залежати від комбінації сервера або браузера / сервера.)
Девід Молес

0

Можна (очевидно) надсилати будь-який рядок у параметрах GET, хоча не рекомендується надсилати логін та пароль, оскільки це може зробити його дуже видимим, особливо якщо це не в запиті AJAX.

Потім вам потрібно буде кодувати сторінку сервера, щоб витягнути логін та пароль, а потім перевірити та використовувати їх будь-яким способом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.