是",@&引用;URL中主机名后的有效字符?

是",@&引用;URL中主机名后的有效字符?,url,uri,Url,Uri,在这种情况下,当然允许使用“@”: 然而,在这些情况下: 它们是“正常”还是“@”应该被编码? 类似地,如果它们“正常”,主机部分是否分别为“bar”和“b.com” 我查看了rfc(),第45页使用了以下示例: ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm 指示“@”表示“10.0.0.1”是主机,但我不确定,因为查询部分没有正确启动(否“”)。(然后它又提到了“攻击”,我感到困惑。)

在这种情况下,当然允许使用“@”:

然而,在这些情况下:

它们是“正常”还是“@”应该被编码? 类似地,如果它们“正常”,主机部分是否分别为“bar”和“b.com”

我查看了rfc(),第45页使用了以下示例:

ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm
指示“@”表示“10.0.0.1”是主机,但我不确定,因为查询部分没有正确启动(否“”)。(然后它又提到了“攻击”,我感到困惑。)

背景:我试图确定Steven Levithan的正则表达式在将“”解析为大量“bar”时是否正确:
RFC中使用了您提到的示例来说明这样的URI如何欺骗人类。在本例中,
cnn.example.com&story=breaking_news
将是URI的用户信息部分,与第一个示例中的
user:pass
相同

至于URI本身是否允许
@
,据我所知

如果你看第48页和第49页,你会发现(除其他外)以下规则:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part     = "//" authority path-abempty / *snip*
authority     = [ userinfo "@" ] host [ ":" port ]
path-abempty  = *( "/" segment )
segment       = *pchar
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
将此应用于
http://www.foo.com/@我们发现
scheme
http
<代码>权限
仅包含强制的
主机
部分,即
www.foo.com
userinfo
端口
都是可选的)。与此
权限
组件一起更高的部分有一个
路径空
组件,该组件由一个重复的
/@条组成。
段由4个重复的
pchar
组成:
@
b
a
r
。因此,
bar
不是主机名

另一方面,任何给定的浏览器和/或Web服务器在多大程度上遵循RFC是一个完全不同的问题


免责声明:我不是专家,我已经有一段时间没有做过一般性的研究了。

为了安全起见,我会对它进行编码。可能的重复我认为你是对的,它是重复的。(这对谷歌来说太难了!)然而,答案相互矛盾,所以这可能有一些用处。