filepath.clean不是安全函数,只是路径归一化工具;它仅做语义压缩(如将"a/./b/../c"变为"a/c"),不拒绝输入、不校验越界、不处理url编码或空字节,必须配合url.pathunescape、统一分隔符、strings.hasprefix白名单校验及os.lstat符号链接检查等多层防护才安全。

filepath.Clean不是安全函数,只是路径归一化工具
很多人以为调用 filepath.Clean 就能防路径遍历,这是根本性误解。它不拒绝输入、不校验越界、不处理 URL 编码、也不识别符号链接——filepath.Clean("../../etc/passwd") 在 Linux 下返回 "/etc/passwd",在 Windows 下可能返回 "C:\etc\passwd",完全没拦住攻击。
它的唯一作用是语义压缩:把 "a/./b/../c" 变成 "a/c",把重复斜杠、点号段都规整掉。但规整完的路径依然可能是危险的。必须把它当作“预处理步骤”,而非“安全闸门”。
-
filepath.Clean不会修改原始字符串内容,只做标准化;它对未解码的"%2e%2e%2fetc%2fpasswd"甚至原样返回 - 它不处理空字节
