如何检查文件名string不是一个文件path
我在节点js上编写一个服务器应用程序。 操作系统是Linux。
我收到的文件名为一个纯string,所以可以被黑客入侵。 然后我连接文件名string和pathstring是这样的:
filepath = '/home/www/upload/' + filename;
我想保护一个上传脚本,除了上传文件夹[或者它的子文件夹:可选],使用我的应用程序逻辑,而不是Linux写入任何地方。
我目前天真的解决scheme是阻止有..
子string的文件名。 我不在乎是否有人有两个点的文件名。
当然,在安全方面,我必须向观众征求意见:任何事情都可能出错?
我会使用path.resolve
这个: http : path.resolve
尝试filepath = path.resolve(filepath)
接着
goodPath = filepath.startsWith('/your/allowed/upload/dir');
if (path.basename(filepath) != filename) { // reject that sukka }