如何清理用户为网络应用程序创建的文件名?

时间:2010-10-07 02:28:11

标签: security filenames sanitize

我正在研究即时通讯应用,用户可以从朋友那里接收文件。

接收文件的名称由文件的发件人设置,多个文件可以与子目录一起发送。例如,一起发送的两个文件可能是“1”和“sub / 2”,因此下载的结果应该类似于“downloads / 1”和“downloads / sub / 2”。

我担心这会带来安全隐患。对于类似Unix的用户来说,两个有潜在危险的电影名称就像“../../../somethingNasty”或“〜/ somethingNasty”。我想到的其他潜在问题是文件名,其中包含目标文件系统不支持的字符,但这似乎更难以忽略?

我正在考虑剥离收到的文件名为“..”和“〜”,但这种黑名单方法,我单独考虑问题案例似乎不是好安全的秘诀。什么是建议的方法来消毒文件名,以确保没有发生任何险恶的事情?

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

1 个答案:

答案 0 :(得分:0)

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

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