我正在尝试编写一个简单的C#函数来验证用户输入的shell脚本的完整Unix路径,以避免一些事情:
rm -rf /
该功能将采用类似
的形式public bool IsUnixPathValid(string path)
{
return !path.IsEmptyOrNull()
&& path.StartsWith("/")
&& !path.ContainsCharacters(";', \"")
}
问题:是否存在可执行此类操作的现有库?如果没有,那么最好的方法是什么,我应该注意哪些细节(想想安全)。
答案 0 :(得分:4)
如果您没有尝试验证指定路径上是否存在任何文件,那么您应该做的唯一事情就是检查路径是否以/
开头(因为您只想要绝对路径)并且没有嵌入的NUL
(0)字节(因为POSIX路径不能包含那些)。而已。绝对其他任何东西都可以成为一条有效的道路。值得注意的是,路径中允许使用空格和分号。
我猜你也可以检查多个相邻的斜杠,因为它们是冗余的......但它们仍然被接受(每组多个斜杠与单个斜杠具有相同的含义),因此它们实际上并不是无效的。 / p>
检查路径中嵌入的“rm -rf /”等可疑字符串是个坏主意。如果您遇到由直接发送到系统命令的不带引号路径引起的安全问题,那么您需要解决这些安全问题(通过适当地引用路径,或者更好地,通过不通过解析它们的shell之类的东西)而不是将其列入黑名单很少选择嵌入字符串。如果你列入黑名单,那么你很可能会错过应该被列入黑名单的东西,而且,你有可能拒绝那些实际上是有效的良性路径的东西。