Экранирование символов имени пользователя в основных URL-адресах аутентификации

При использовании базовой HTTP-аутентификации имя пользователя может быть передано в URL-адресе, например.

http://[email protected]/path/

Но теперь предположим, что имя пользователя — это адрес электронной почты, например. Дэвид@company.com. Делать это явно двусмысленно:

http://[email protected]@foo.com/path/

Есть ли способ избежать символа @ в имени пользователя? Я попробовал стандартную кодировку URL:

http://david%[email protected]/path/

Но этого не произошло.


person David Ebbo    schedule 16.07.2011    source источник
comment
Вы не можете использовать @ в URL-адресах. Или я вас неправильно понял?   -  person Hnatt    schedule 16.07.2011
comment
Я знаю, что немного опоздал на вечеринку, но вы просто пропустили часть пароля? стандартный синтаксис должен быть http(s)://user:pass@host. Так что в вашем случае это должно быть http(s)://david%40company.com:Y0ur%24up3r%243cur3P%40%24%[email protected].   -  person FatalMerlin    schedule 09.08.2017
comment
@FatalMerlin, вы можете иметь как вкус только с именем пользователя, так и с именем пользователя и паролем. Хотя я думаю, что это ортогонально проблеме побега.   -  person David Ebbo    schedule 10.08.2017


Ответы (1)


Согласно RFC 3986, раздел 3.2.1, он должен быть закодирован в процентах:

  userinfo    = *( unreserved / pct-encoded / sub-delims / ":" )

Так это выглядит

http://david%[email protected]/path/

Верно. Где ты пытаешься это прочитать? Может быть, вам нужно вручную расшифровать значение?

person sagi    schedule 16.07.2011
comment
У меня есть собственный код на стороне сервера, который обрабатывает учетные данные. Мне нужно отладить его и увидеть, что именно я получаю, когда убегаю таким образом. Я буду следить! - person David Ebbo; 16.07.2011
comment
Клиенты не справляются с таким синтаксисом. например IE9 блокирует его еще до отправки любого запроса и выдает ошибку, что Windows не может найти 'david%40company. [email protected]/путь'. Проверьте правильность написания и повторите попытку. Это наводит меня на мысль, что этот синтаксис на самом деле не поддерживается, несмотря на то, что это может показаться из RFC. - person David Ebbo; 17.07.2011
comment
Интересно. Мы попробовали этот точный синтаксис с URL-адресом, полученным с помощью drupal_http_request Drupal, и это не позволило пользователю войти в систему. (С тех пор мы исправили проблему, но я все равно начал искать из академического интереса.) - person Trejkaz; 23.01.2017