koa-static 报错BadRequestError: Malicious Path

2019-11-16
nodejs
7474

在使用koa-static

类似: <host>//some/path 带两个斜杠的 会报

BadRequestError: Malicious Path   //(有害的路径)

这是koa-static的一种安全策略,保证内部文件不被访问

正常路由<host>/some/path 会被解析为some/path 访问当前静态资源目录下的资源。

//some/path 会被解析为 /some/path 访问了根路径的绝对路径

这里绝对路径会被判定是有害路径

具体代码可见:https://github.com/pillarjs/resolve-path/blob/master/index.js#L76

判断绝对路径可以参考: https://github.com/sindresorhus/path-is-absolute // Running on any OS

pathIsAbsolute.posix('/home/foo');
//=> true
pathIsAbsolute.posix('C:/Users/foo');
//=> false
pathIsAbsolute.win32('C:/Users/foo');
//=> true
pathIsAbsolute.win32('/home/foo');
//=> false

除此之外koa-static 还杜绝以下几种情况的路径:

  • 路径中包含\0的路径
  • 超出当前目录的路径如<host>/\.\./path