Назад | Перейти на главную страницу

Как передать вопросительный знак (?) В пароле для базовой аутентификации HTTP в параметрах URL?

Я автоматизирую веб-сайт, для которого требуется базовая HTTP-аутентификация.

Предложения, приведенные в этой ссылке, в большинстве случаев работают как шарм:

Можете ли вы передать user / pass для базовой аутентификации HTTP в параметрах URL?

Однако у некоторых пользователей есть вопросительный знак (?) в пароле. Посоветуйте, пожалуйста, как избежать знака вопроса.

P.S. Я знаю что @ в имени пользователя можно использовать как %40.

Я полагаю, вы, должно быть, имеете в виду userinfo часть URL-адреса, в котором передаются учетные данные пользователя, а не «параметры URL» (которые являются частью Строка запроса):

https://<userinfo>@example.com/foo?<query-string>

Как и любой символ, который не разрешен в какой-либо части URL-адреса (поскольку он может иметь особое значение), он должен быть закодирован в URL-адресе (закодированный в процентах) так как % за которым следует двузначный шестнадцатеричный код этого символа.

Так, @ является %40 и ? является %3F.

Но это не единственные два символа, которые могут нуждаться в кодировке URL. Вы должны передавать значение через функцию URL-кодирования в своем скрипте, чтобы правильно URL-адрес кодировал эту часть URL-адреса.

RFC 3986 определяет, какие символы разрешены (не закодированы) в userinfo часть URL:

userinfo    = *( unreserved / pct-encoded / sub-delims / ":" )
unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

Итак, все остальное должно быть закодировано в процентах, включая : и % - если они являются частью пользователь или пароль части (чтобы свести на нет особое значение).

Также в том же документе говорится:

Использование формата «пользователь: пароль» в поле информации о пользователе не рекомендуется.

Следовательно, поддержка браузеров была неоднородной, постоянно появляясь в разных версиях (безопасность - главная проблема). Я считаю, что последние версии Chrome (протестированные v79) и Firefox поддерживают учетные данные пользователя в URL-адресе. Я видел комментарии, что это также работает в последней версии Safari (?), Хотя это не работало долгое время и в настоящее время не работает для меня (хотя я не использую последнюю версию на iOS 12.4.1 ). И IE отказался от поддержки имен пользователей и паролей в URL-адресе несколько лет назад, и похоже, что он не вернется.