我正在使用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这样的庞大框架。
答案 0 :(得分:1)
我也提倡使用现成的包来提供静态内容。我甚至会说你应该使用httpd / ngnix来提供你的静态内容。
话虽这么说,你可以使用path.resolve()
。根据基本publicfiles/
目录解析请求路径,并确保结果以publicfiles/
作为前缀。如果没有,那就是一个糟糕的请求。