gpt4 book ai didi

c++ - 创建安全的转义路径基础/文件名,检查是否安全

转载 作者:可可西里 更新时间:2023-11-01 10:08:59 26 4
gpt4 key购买 nike

我想知道是否有一种生成可移植的文件系统安全文件名的通用方法。也就是说,我有一个用户输入的字符串,并希望生成一个名称与他们选择的名称非常相似的文件。生成的名称不得包含任何路径引用或其他特殊的文件系统特殊名称或标记。

目前我只是用其他字符或空字符串替换一堆已知的坏字符。例如,给定名称 ABC/DEF* : A Company? 我将生成字符串 ABC - DEF - A Company。我对替换字符的选择完全是随意的,因为我不知道通用的转义符号。

所以我的相关问题是:

  1. 是否有一种方法(可能在 boost 文件系统中)可以告诉我名称是否严格引用没有路径的文件?
  2. 是否有函数告诉我该名称是否“安全”用作文件(对于某些文件系统,这可能是来自 1 的额外检查)?
  3. 是否有函数可以将字符串转换为合理的安全名称?

附加说明

对于#1,我想只是将 boost path::filename() 与原始对象进行比较,如果它们相同,那么我就有了一个文件。但是,这仍然允许使用“..”和“.”之类的东西。但如果#2 有一个好的解决方案,那可能没问题

理论上我必须提供文件所在的目录,因为不同的文件系统可能有不同的要求。但是操作系统的全局解决方案也可以。

我已经有一个函数可以替换一堆众所周知的不安全字符。

通用文件对话框不能用于过滤,因为界面可能并不总是允许它们,并且在某些情况下,用户不会直接意识到与文件的关系(但是高级用户会)。

最佳答案

根据 POSIX fully portable filenames ,唯一可移植的文件名是那些仅包含 A–Za–z0–9._- 且最长为 14 个字符的文件名。

也就是说,更实用的方法是假设现代文件系统可以处理更长的文件名,并简单地将所有未明确标记为“安全”的字符替换为 _。有时,这些字符不是用 _ 替换,而是十六进制编码,例如在 URL 中:sample%20file.txtKDE例如,应用程序使用它。

至于实现,很简单s/[^A-Za-z0-9.-]/_/

关于c++ - 创建安全的转义路径基础/文件名,检查是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com