Skip to content

关于http请求的body字段的读取逻辑 #8

Description

@KivinChiu

Problem / 问题

粗略看了一下http请求的处理逻辑(好吧,我没细看,其实是问的ai分析),发现一个问题,请求体中的body好像是无条件读取的,并且是先于路由。这个应该是不安全的,且浪费服务器资源,正常都是懒加载body的,比如整个路由中使用一个统一的文件上传接口,且接口是要求必须登录的,那么我任意构造或携带一个过期的token访问,上传一个文件,服务器在读取完整数据后,告诉我token/session过期了,这不太合理。服务器应该只读取header,然后过中间件,再过路由,这样可以防止文件上传/带宽/DDOS攻击(请求不合法直接关闭连接不接收body)。
我之前的服务器body的懒加载逻辑是:在路由handler中,调用request.form或request.json时,这些函数首先判断是否已经接收和解析了body,如果没有就处理一次(request对象有一个类似isNeedBody/isBodyReady的bool变量)。大概是这样的。
作为生产环境使用的web服务器,总是会遇到各种扫描、暴破等等,这个问题还是挺重要的。望大佬考虑是否调整

Proposed Solution / 建议方案

建议请求体改为懒加载方式,读取http头完成就直接进入处理逻辑,只有显式调用req.body()、req.form()等方法时,才去读取socket并根据请求体类型解析。

Alternatives Considered / 替代方案

No response

Additional Context / 补充说明

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions