节点的http服务器是否对ReadableStream请求进行Content-Length验证
Does node's http server have any Content-Length verification for the ReadableStream request
Node.js 的 http 服务器在请求上实现了一个 ReadableStream。
我知道我需要自己检查 Content-Length 来决定是否要接受那么长的请求。
但是节点是否对 ReadableStream 进行任何验证以确保其有效?
A) 如果客户端提前关闭连接并且 Node 没有收到足够的数据来满足 Content-Length,它会 end
流并假装它没问题还是会发出错误?
B) 如果客户端发送的数据多于 Content-Length 所说的,Node 会发出错误并停止传输数据,还是继续传输超出长度的数据?
我正在通过 XHR2 实现简单的 POST 正文上传,我想知道我是否必须编写自定义转换流来自己验证流(所以有人不能说他们正在上传 2KB但实际上上传了 20GB 写入磁盘)。
回答我自己的问题,因为我必须尝试对测试脚本进行测试攻击。
节点确实可以正确处理 http 请求流。
在将请求通过管道传输到文件的正常请求中:
end
事件将直接在 req
上触发
close
事件将在可写流上触发
当您尝试编写超出 Content-Length 的内容时:
req
将 Content-Length 定义的数据量通过管道传输到文件中
end
事件将直接在 req
上触发
close
事件将在可写流上触发
当您尝试下写然后关闭连接时:
close
事件将直接在 req
上触发
- 不会在可写流上触发任何事件(我假设这意味着您应该将其视为中止并自行关闭和取消链接文件)
因此,在您确认 Content-Length 可接受后,将 req 传送到文件是安全的。当 Content-Length 为 2KB 时,Node 不会将 20GB 的数据写入磁盘。
Node.js 的 http 服务器在请求上实现了一个 ReadableStream。
我知道我需要自己检查 Content-Length 来决定是否要接受那么长的请求。
但是节点是否对 ReadableStream 进行任何验证以确保其有效?
A) 如果客户端提前关闭连接并且 Node 没有收到足够的数据来满足 Content-Length,它会 end
流并假装它没问题还是会发出错误?
B) 如果客户端发送的数据多于 Content-Length 所说的,Node 会发出错误并停止传输数据,还是继续传输超出长度的数据?
我正在通过 XHR2 实现简单的 POST 正文上传,我想知道我是否必须编写自定义转换流来自己验证流(所以有人不能说他们正在上传 2KB但实际上上传了 20GB 写入磁盘)。
回答我自己的问题,因为我必须尝试对测试脚本进行测试攻击。
节点确实可以正确处理 http 请求流。
在将请求通过管道传输到文件的正常请求中:
end
事件将直接在req
上触发
close
事件将在可写流上触发
当您尝试编写超出 Content-Length 的内容时:
req
将 Content-Length 定义的数据量通过管道传输到文件中end
事件将直接在req
上触发
close
事件将在可写流上触发
当您尝试下写然后关闭连接时:
close
事件将直接在req
上触发
- 不会在可写流上触发任何事件(我假设这意味着您应该将其视为中止并自行关闭和取消链接文件)
因此,在您确认 Content-Length 可接受后,将 req 传送到文件是安全的。当 Content-Length 为 2KB 时,Node 不会将 20GB 的数据写入磁盘。