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
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