我正在开发一个即时通讯应用程序,用户可以在其中接收朋友的文件。
接收到的文件的名称由文件的发送者设置,可以多个文件一起发送,有子目录的可能。例如,一起发送的两个文件可能是“1”和“sub/2”,这样下载的结果应该是“downloads/1”和“downloads/sub/2”。
我担心这会带来安全隐患。就在我的脑海中,对于类 Unix 用户来说,两个具有潜在危险的文件名可能类似于“../../../somethingNasty”或“~/somethingNasty”。我想到的其他潜在问题是目标文件系统不支持字符的文件名,但这似乎更难并且可能更好地忽略?
我正在考虑删除接收到的“..”和“~”文件名,但这种我个人认为问题案例的黑名单方法似乎很难成为良好安全性的秘诀。清理文件名以确保不会发生任何险恶的推荐方法是什么?
如果它有所作为,我的应用程序正在使用 QT 框架的 C++ 上运行。