【问题标题】:ensure safe url nodejs [closed]确保安全的url nodejs [关闭]
【发布时间】:2013-11-01 01:42:52
【问题描述】:

我正在使用 nodejs,我的网站的一部分将只是简单地提供文件,基本上在包含公共文件的某个目录上使用 fs.readFile。例如,当您请求mydomain.com:1234/hello/info.html 时,我的脚本将请求文件publicfiles/hello/info.html 并将结果发送给客户端。但是,我知道如果攻击者输入mydomain.com:1234/../evilurl/userpasswords.txt nodejs 将尝试获取文件publicfiles/../evilurl/userpasswords.txt,这实际上与evilurl/userpasswords.txt 相同,所以换句话说,他们可以访问publicfiles 目录之外的文件并访问“安全”信息。我知道我可以通过简单地确保req.url 不包含.. 来防止这种情况发生,但是用户还有其他方法可以访问坏文件吗?他们可以使用某种转义序列而不是..,这意味着同样的事情吗?另外,我不想为此使用快递。如果有专门为此的库,我很好,但我不想要一个像express这样的庞大框架。

【问题讨论】:

  • Express 不是一个“庞大的框架”。你应该使用它。或者只使用npmjs.org/package/st
  • @SLaks 我猜你是对的。我的意思是,express 只是一个路由框架。哦,是的,它也有请求管理。就这些。不用等待,它也可以处理视图。只有三大特点。就这些。不,等等,它也恰好有会话管理。你明白了。
  • @Markasoftware 不确定您所说的“请求管理”是什么意思。中间件?如果是这样,其中大部分是完全选择加入的。你必须明确地use()他们——包括session()管理。而且,Express 不支持视图;它为视图引擎提供了一个轻量级的通用包装器。而且,如果您不想使用视图引擎,那就不要。您可以write()/end()send()sendfile()
  • @SLaks 为什么不直接使用相关函数-github.com/isaacs/st/blob/master/st.js#L195
  • @levi:因为正确地提供静态文件需要的不仅仅是点。

标签: node.js security url path relative-path


【解决方案1】:

我也提倡使用现成的包来提供静态内容。我什至会说你应该使用 httpd/ngnix 来提供你的静态内容。

话虽如此,您可以使用path.resolve()。根据您的基本 publicfiles/ 目录解析请求路径,并确保结果以您的 publicfiles/ 作为前缀。如果没有,那么这是一个错误的请求。

【讨论】:

  • 感谢path.resolve的建议,我已经能够让它工作了。如果您可以提供一些示例代码和文档链接会更好,但这很好。谢谢!另外,我不想使用 Apache/httpd,因为我也有同一个项目的某些部分使用节点来提供静态文件服务。
猜你喜欢
  • 2016-07-20
  • 2021-11-03
  • 2020-03-04
  • 2015-06-29
  • 2016-11-25
  • 1970-01-01
  • 2016-02-27
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多