URL 路径中的段的安全最大长度应该是多少?

Posted

技术标签:

【中文标题】URL 路径中的段的安全最大长度应该是多少?【英文标题】:What is a safe maximum length a segment in a URL path should be? 【发布时间】:2015-06-10 02:14:37 【问题描述】:

很多人都在问URL 的最大长度是多少?” 但据我所知,没有人问这个问题: p>

我认为这个问题同样重要。

这个问题是一个一般性问题,旨在支持尽可能多的开箱即用系统。

在 C# 中,您可以从传入的请求中获取 URL 路径段的列表,并安装安全模块。对于这种情况,URL 路径中的段的最大长度被认为是多少?

我在以下页面上读到,超过 260 个字符的 URL 路径段可能会导致自定义 ASP.NET 模块出现问题:

http://www.paraesthesia.com/archive/2011/08/26/long-url-path-segments-in-asp-net-routing-yield-400.aspx/

在网络浏览器中,无论您访问哪个网站,您都可以键入 URL 段,/ 是通常映射到主页的 URL 路径段。 Internet Explorer、Chrome 和 Firefox 是流行的浏览器,它们支持的 URL 路径段长度的最大长度是多少?

我可以从以下资源中看到,不同浏览器的 URL 路径的最大长度是不同的,这个数字有时会很高:

What is apache's maximum url length?

但这是一条路径,而不是路径段。

我还知道,在重写路径时,底层文件系统路径长度会起作用,而且我可以看到支持的大概数字是 *nix 操作系统中的大约 255 个字符。

其他注意事项包括数据库表中 URL 路径段的最大长度。例如,在 mysql 中,一个 varchar 列最多可以包含 255 个字符,但是否存在这种情况,人们是在 MySQL 中的表中存储路径段还是人们在 varchar 列中存储完整的 URL?这是否意味着 255 个字符对于 URL 路径段来说太长了?

是否有任何关于 URL 路径段可以有多长的 W3C 规范,因为我无法发现任何内容?

我确实阅读了关于 URI 的 W3C 规范,但我还是没有发现任何有用的东西:

http://www.ietf.org/rfc/rfc2396.txt

我很困惑,对于 URL 路径段的长度没有设定标准,所以也许我遗漏了什么?

我真的在寻找尽可能多的信息,了解不同系统支持的内容,以及 URL 路径段的安全长度。

【问题讨论】:

What is the maximum length of a URL in different browsers?的可能重复 URL 的一部分与 URL 不同。 对不起,你说得对,我没注意。 【参考方案1】:

URL length 不应超过 2K(只是惯例)。 segment path 可以是任何大小

长度不应超过 255 个字符(请参阅RFC3986)。限制仅用于实施。附加到 URL 的 Segments 仅在特定情况下受到限制(旧的常见用途)。

现在几乎所有的请求都通过rewrite rule 的一个文件,因此段长度无关紧要。 之后,段被保存在一个可以很大的变量中,所以基本上没有限制。

【讨论】:

【参考方案2】:

可能与What is the maximum length of a URL in different browsers?有关

总之

根据 HTTP 规范,对 URL 的长度没有限制。将您的网址保持在 2048 个字符以下;这将确保 URL 在所有客户端和服务器配置中都有效。此外,搜索引擎喜欢将 URL 保持在大约 2000 个字符以下。

Chrome 有 2MB 的 URL 限制,IE8 和 9 有 2084 个字符的限制。因此,一切都指向将您的 URL 限制在大约。 2000 个字符。

此外,从可用性的角度来看,用户无法使用/读取过长的 URL。

但是,域名有一个最大值。长度为 255 个字符。 所以为了安全起见,最大。鉴于您的 URL 存在于 1 个段中,一个 URL 段的长度约为 1745 个字符。

【讨论】:

段只是 URL 的一部分。 是的,所以最大。段长度最大。 URL 长度 - 255(用于域名)。我会更新我的答案。 FWIW,Twitter 的 URL 解析在大约 4000 个字符后中断,之后推文显示太长 ;)(截至 2019 年 8 月 8 日) 旧问答,但这个公认的答案仍然不能回答实际问题。如问题中所述,某些 *nix 系统在进行 URL 重写时无法支持超过 255 个字符的路径段,因此此处的答案(1745 个字符)在这些系统上并不安全。我认为 OP 要求跨各种系统的最大安全段长度。很可能他们已经回答了自己的问题:由于给出的原因,将片段保持在 255 个字符以下。【参考方案3】:

没有这样的规格限制。可能存在实施限制,但您不会在规范中找到这些限制。

Nit:URI 由 IETF 而非 W3C 定义,当前规范为 RFC 3986。

【讨论】:

这就是我所追求的,实施限制列表。

以上是关于URL 路径中的段的安全最大长度应该是多少?的主要内容,如果未能解决你的问题,请参考以下文章

一个TCP报文段的数据部分最多为多少字节,为啥

TCP 、UDP包的最大长度是多少?

URL/URI最大长度是多少

什么是apache的最大URL长度?

将路径分成相等的部分

您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?