0

我正在开发一个即时通讯应用程序,用户可以在其中接收朋友的文件。

接收到的文件的名称由文件的发送者设置,可以多个文件一起发送,有子目录的可能。例如,一起发送的两个文件可能是“1”和“sub/2”,这样下载的结果应该是“downloads/1”和“downloads/sub/2”。

我担心这会带来安全隐患。就在我的脑海中,对于类 Unix 用户来说,两个具有潜在危险的文件名可能类似于“../../../somethingNasty”或“~/somethingNasty”。我想到的其他潜在问题是目标文件系统不支持字符的文件名,但这似乎更难并且可能更好地忽略?

我正在考虑删除接收到的“..”和“~”文件名,但这种我个人认为问题案例的黑名单方法似乎很难成为良好安全性的秘诀。清理文件名以确保不会发生任何险恶的推荐方法是什么?

如果它有所作为,我的应用程序正在使用 QT 框架的 C++ 上运行。

4

1 回答 1

0

将“..”替换为 XXX 和 ~ 替换为 YYY 更明智。这样,您可以将任何无效路径转换为完全有效的路径。即如果用户想上传“../../../somethingNasty” - 没问题,让他上传文件并将其存储在 XXX/XXX/XXX/somethingNasty 中。

或者更好的是,您可以使用 %XY 对所有非字母数字字符(斜杠除外)进行编码,其中 XY 是字符的十六进制代码。这样你就会有 %2E%2E/%2E%2E/%2E%2E/SomethingNasty

于 2010-10-07T06:54:21.510 回答