一个http客户端可以说谎请求的内容长度?

时间:2013-10-19 19:19:11

标签: node.js http

具体来说,我是从node.js服务器的角度来谈论的。由于http.client验证content-length,因此很难在node.js中对此进行测试。

客户可以谎言身体的内容长度,至少在它到达http.createServer().on('request')的时候?

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

试试吧,看看; - )

答案 1 :(得分:0)

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