You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js HTTP.IncomingMessage路径遍历防护疑问及框架开发咨询

关于路径遍历攻击防护的相关问题解答

1. Chrome自动移除URL中../的行为是否属于路径遍历攻击防护?是否合理?

Chrome这类浏览器自动移除URL中../的行为不属于后端层面的路径遍历攻击防护,它只是浏览器遵循URI标准规范(RFC 3986)对URL做的标准化处理——浏览器会在发送请求前解析并规范化URI,将相对路径转换为绝对路径后再发送给服务器。

这种行为是合理的:既符合URI的规范要求,也能减少前端层面的无效请求,但这只是客户端的防护手段,完全依赖它极不安全——攻击者可以直接用curl、Postman等工具绕过浏览器,构造包含../的原始HTTP请求发送给后端。

2. 作为后端框架开发者应当如何处理?

  • 后端必须独立做URI规范化与校验:绝不信任客户端传来的URL,要自行对请求的url(或path)进行解析和规范化,比如Node.js中使用path.normalize()处理路径,再转换为绝对路径后做校验。
  • 严格限定访问根目录:明确允许访问的根目录(比如你的public目录),将规范化后的路径与根目录做比对,确保最终路径在允许范围内。示例代码:
    const allowedRoot = path.resolve(__dirname, 'public');
    const requestedPath = path.resolve(allowedRoot, path.normalize(req.url));
    if (!requestedPath.startsWith(allowedRoot)) {
      res.writeHead(403);
      res.end('Forbidden');
      return;
    }
    
  • 处理编码后的恶意路径:过滤或拒绝包含%2e%2e%2f(URL编码后的../)、\(Windows路径分隔符)这类特殊字符的路径,先解码URL再做校验。
  • 完全不依赖客户端处理结果:即便浏览器已规范化URL,后端也要按安全流程处理所有请求,因为攻击者可直接绕过浏览器发送原始请求。

3. 额外需要补充的路径遍历攻击防护措施

即使基础的../类攻击无法实施,还需做好以下防护:

  • 处理多重URL编码:攻击者可能使用%252e%252e%252f这类双重编码的路径,后端要先对URL进行多次解码,再做规范化校验。
  • 过滤冗余与特殊路径片段:移除.(当前目录)、/./这类冗余片段,同时拦截操作系统特殊路径(比如Windows的C:\、Linux的/root)。
  • 使用文件后缀白名单:仅允许访问特定后缀的文件(比如你的场景里只允许.png、.jpg等图片格式),拒绝不符合规则的请求。
  • 强化文件权限控制:确保服务器进程仅拥有访问允许目录的最小权限,避免意外泄露敏感文件。
  • 监控异常请求日志:记录所有包含异常路径片段的请求,便于后续排查潜在攻击尝试。

内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:11:06