1

我正在尝试编写一个简单的 C# 函数来验证用户输入的 shell 脚本的完整 Unix 路径,以避免一些事情:

  • 路径格式正确,没有无效符号,如空格或分号
  • 没有可疑的命令,例如rm -rf /
  • path 代表完整路径,没有亲属关系
  • 脚本是否真的存在并不重要

该函数将采用如下形式,

public bool IsUnixPathValid(string path)
{
    return !path.IsEmptyOrNull() 
        && path.StartsWith("/") 
        && !path.ContainsCharacters(";', \"")
}

问题:是否存在可以执行此类操作的现有库?如果没有,最好的方法是什么,我应该注意哪些小细节(想想安全)。

4

1 回答 1

5

如果您没有尝试验证指定路径中是​​否确实存在任何文件,那么您唯一应该做的就是检查路径是否以/(因为您只需要绝对路径)开头并且没有嵌入NUL(0) 个字节(因为 POSIX 路径不能包含那些)。而已。绝对其他任何东西都可以是有效的路径。值得注意的是,路径中允许使用空格和分号。

我想您还可以检查多个相邻的斜杠,因为它们是多余的……但是它们仍然被接受(每组多个斜杠与单个斜杠具有相同的含义),因此它们实际上并不是无效的。

检查路径中嵌入的可疑字符串(如“rm -rf /”)是个坏主意。如果您遇到由直接发送到系统命令的未引用路径引起的安全问题,那么您需要解决这些安全问题(通过适当地引用路径,或者更好的是,不将它们通过解析它们的外壳之类的东西)而不是将它们列入黑名单很少选择嵌入的字符串。如果您将其列入黑名单,那么您很可能会错过本应列入黑名单的内容,此外,您可能会拒绝那些实际上是有效的良性路径的内容。

于 2012-12-13T22:04:13.843 回答