如何验证Unix路径?

时间:2012-12-13 15:22:41

标签: c# asp.net validation unix

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

  • 路径格式正确,没有无效符号,如空格或分号
  • 没有可疑的命令,例如rm -rf /
  • 路径代表完整路径,没有亲戚
  • 脚本实际存在无关紧要

该功能将采用类似

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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