根据w3c规范,用户名或密码可以在其中包含哈希#?

时间:2015-09-18 22:51:12

标签: url passwords standards w3c

使用基本身份验证制作网址时:

https://username:password@someurl.com/some/api/path
如果usernamepassword包含#哈希符号,

是有效还是无效? Hash通常位于网址末尾,因此我不确定它是否是在用户名和/或密码中使用的有效字符。

我无法从w3c url规范中说出...它说usernamepassword应该是alphanum2,我无法弄清楚是什么这完全意味着。

http://www.w3.org/Addressing/URL/url-spec.txt

我们现在更经常地鼓励我们仔细挑选更复杂的密码,包括#哈希等特殊字符。

2 个答案:

答案 0 :(得分:3)

警告:请注意,RFC 7230 disallows要在HTTP / HTTPS URI中使用userinfo子组件;对于所有URI,通常格式username:password为{ {3}}。)

HTTPS URI方案是deprecated,它引用了{39}来定义defined in RFC 7230

authority组件可以包含authority component,其语法定义为:

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

userinfo subcomponent中,您可以查找这些部分的定义方式。总而言之,这些是允许的字符:

  • a - zA - Z

  • 0 - 9

  • - . _ ~ ! $ & ' ( ) * + , ; = :

  • 任何appendix A

因此,您可能无法直接在#子组件中使用userinfo,但您可以使用其百分比编码形式(%23),例如foo#bar

https://foo%23bar@example.com/some/api/path

答案 1 :(得分:1)

它进一步定义了几行:

alphanum2              alpha | digit | - | _ | . | +  

所以,答案显然是

另外:

  

我们现在更经常地鼓励我们仔细挑选更复杂的密码,包括#hashes等特殊字符。

是的,当然您可以将它们用于HTTP Basic Auth,但是您无法通过URL登录