0

具体来说,我是从 node.js 服务器的角度来讨论的。很难在 node.js 中测试它,因为http.clientvalidates content-length

客户可以在正文的内容长度上撒谎吗,至少在它达到的那一点上http.createServer().on('request')

  • 客户可以发送大于 的正文content-length吗?我认为这是不可能的,因为它很可能在解析器级别进行检查,但我想要证明。
  • 客户可以发送小于 的正文content-length吗?我认为这可能是真的。

我担心可能不使用行为良好的 http 客户端的恶意用户。

4

2 回答 2

1

当然有可能。您可以简单地打开一个 TCP 套接字连接到运行 Web 服务器的任何 IP/端口,并在那里编写您想要的任何内容。当然,表现良好的客户不会这样做,但没有什么能阻止客户这样做。

但是,这往往是您在服务器问题上使用的任何 HTTP 堆栈,在本例中为节点。它需要 1)不要盲目地读入(巨大的)内容长度字节,因为这可能会使服务器严重崩溃,并且 2)确保(对于合理大小的请求)客户端没有撒谎。

在节点的情况下,它在这里可见:https ://github.com/joyent/node/blob/master/deps/http_parser/http_parser.c#L1471

试试看吧;-)

于 2013-10-19T19:52:05.630 回答
0

当然,这取决于
您可以发送 wring 内容长度,问题是客户端如何处理它。
有脚本或服务器客户端可能会尝试下载您的内容并完全搞砸。
大多数浏览器似乎都实现了一些容错行为,但是有许多不同的实现。
我记得有一个旧的,即保持插座打开从不关闭它。这最终导致了一个永无止境的页面加载。
一些网景浏览器似乎完全依赖于正确的内容长度。
一个好主意是离开内容长度。这应该适用于每个浏览器。

于 2013-10-19T20:59:35.423 回答