【发布时间】: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