Node.js代码片段存在重大问题?求技术排查与解答
Node.js 服务器代码中的重大安全漏洞解析
先看你提供的代码片段:
const fs = require('fs'); const http = require('http'); const server = http.createServer((req, res) => { if (req.headers['x-secret'] != process.env.SECRET ) res.writeHead(403).end('Secret incorrect'); let body = []; req.on('data', chunk => { body.push(chunk); }); req.on('end', () => { body = JSON.parse(Buffer.concat(body).toString()); fs.writeFileSync(body.filename, body.file); res.writeHead(200).end('OK'); }); }); server.listen(7654);
你已经排查出的几个问题确实存在,但课程提示的重大错误是路径遍历(Path Traversal)漏洞,这是致命的安全风险:
- 代码直接使用请求体中的
body.filename作为写入文件的路径,没有做任何路径校验和限制。攻击者可以构造恶意的filename值,比如../server.js、/etc/passwd(Linux系统)或者C:\Windows\System32\drivers\etc\hosts(Windows系统),从而覆盖服务器上的关键系统文件或应用代码,完全控制服务器。
另外补充你提到的几个问题的细节:
- 链式调用
res.writeHead(403).end()确实无效,且返回403后没有终止后续代码执行——即使返回了403响应,后面的请求体处理逻辑依然会运行,这也是一个隐藏问题,建议改成:res.writeHead(403); res.end('Secret incorrect'); return; fs.writeFileSync会阻塞事件循环,高并发场景下会导致服务器响应缓慢,换成异步的fs.writeFile搭配async/await更合理- 缺乏容错机制:
JSON.parse可能抛出解析错误、fs.writeFileSync可能因权限或路径问题报错,这些未捕获的异常会导致服务器崩溃
内容的提问来源于stack exchange,提问作者apprentice edu
相关产品推荐
相关产品推荐

