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

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

эта ссылка в большинстве случаев работает как чудо:

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

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

P.S. Мне известно, что @ в имени пользователя можно экранировать как % 40 .

1
задан 1 February 2020 в 02:11
1 ответ

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

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 = АЛЬФА / ЦИФРА / "-" / "."  / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!"  / "$" / "&" / "'" / "(" / ")"
  / "*" / "+" / "," / ";"  знак равно
 

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

Также указано в том же документе:

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

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

0
ответ дан 25 February 2020 в 23:36

Теги

Похожие вопросы