我有一个公用文件夹pub
,其中包含子文件夹和文件。用户现在给了我一个相对文件路径,我执行一些映射,然后我读取文件fstream
并将其返回给用户。
现在的问题是,如果用户给我一个路径,例如../fileXY.txt
,或者考虑到路径遍历或其他类型的文件路径注入的其他一些花哨的东西。fstream
只是会接受它并读取我的公共pub
文件夹之外的潜在文件,或者更糟糕的是给他们我系统上所有文件的列表等......
在重新发明轮子之前,我搜索了文件系统库,我看到有这个std::filesystem::canonical函数,并且有很多关于正常形式的讨论。我在这里有一个普遍的问题,这个函数和变体std::filesystem::weakly_canonical可以用来防止这种类型的漏洞吗?所以基本上够了吗?
此外,我系统的文件系统库仍处于实验模式,并且std::filesystem::weakly_canonical
丢失了。但我不能使用,canonical
因为文件必须存在于canonical
. 就我而言,我有某些映射,并且文件在这种意义上不存在。所以我需要模仿这个weakly_canonical
功能,但是怎么做呢?
我在realpath 上看到了有关不存在路径的相关 stackoverflow 问题,建议他重复规范,只要路径存在,然后将不存在的部分添加到其中,但这又容易受到此类注入的攻击。那么我必须自己动手weakly_canonical
还是可以通过组合一些功能以某种方式模仿它std::experimental::filesystem
?