C# 如何验证Unix路径?

C# 如何验证Unix路径?,c#,asp.net,validation,unix,C#,Asp.net,Validation,Unix,我试图编写一个简单的C#函数来验证用户输入的shell脚本的完整Unix路径,以避免以下几件事: 路径格式正确,没有空格或分号等无效符号 没有可疑命令,例如rm-rf/ 该路径表示完整路径,没有关联 脚本是否确实存在并不重要 函数的形式如下: public bool IsUnixPathValid(string path) { return !path.IsEmptyOrNull() && path.StartsWith("/")

我试图编写一个简单的C#函数来验证用户输入的shell脚本的完整Unix路径,以避免以下几件事:

  • 路径格式正确,没有空格或分号等无效符号
  • 没有可疑命令,例如
    rm-rf/
  • 该路径表示完整路径,没有关联
  • 脚本是否确实存在并不重要
函数的形式如下:

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

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

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

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


检查路径中嵌入的“rm-rf/”之类的可疑字符串是个坏主意。如果您有直接发送到系统命令的不带引号的路径导致的安全问题,那么您需要解决这些安全问题(或者根据需要引用路径,或者更好,不通过解析路径的shell之类的东西传递路径),而不是将一些选定的嵌入字符串列入黑名单。如果你被列入黑名单,那么你很可能会错过一些本应被列入黑名单的内容,而且,你可能会拒绝实际上是有效的良性路径的内容。

如果你不尝试验证指定路径上是否存在任何文件,然后,您可能应该做的唯一一件事就是检查路径是否以
/
开头(因为您只需要绝对路径),并且没有嵌入的
NUL
(0)字节(因为POSIX路径不能包含这些字节)。就这样。当然,任何其他内容都可以是有效路径。值得注意的是,路径中允许使用空格和分号

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


检查路径中嵌入的“rm-rf/”之类的可疑字符串是个坏主意。如果您有直接发送到系统命令的不带引号的路径导致的安全问题,那么您需要解决这些安全问题(或者根据需要引用路径,或者更好,不通过解析路径的shell之类的东西传递路径),而不是将一些选定的嵌入字符串列入黑名单。如果你被列入黑名单,那么你很可能会错过一些本应被列入黑名单的东西,而且,你可能会拒绝那些实际上是有效的良性途径的东西。

@Ramhound我正在寻找实际的实现,而是检查Unix路径时的策略和安全问题。@Ramhound用当前的实现更新了问题。@Ramhound我正在寻找实际的实现,但在检查Unix路径时需要考虑的是策略和安全问题。@Ramhound用当前的实现更新了这个问题。如果您想要一个指向常规文件而不是目录的有效路径,检查路径是否以斜杠结尾可能也很有用。如果您想要常规文件而不是目录的有效路径,那么检查路径是否以斜杠结尾也可能很有用。(反之亦然。)