在我的应用程序中,我要求用户使用唯一名称进行注册。该应用程序为他们创建一个具有该名称的目录,然后他们可以使用该目录,保存文件等。
我并没有真正考虑过筛选除字母数字以外的名称。但是,我在某个地方遇到了一个线程,而不是说要确保不创建与 unix 命令名称匹配的目录名称。
这是合法的风险吗?如果是这样,如何以编程方式筛选这种情况?我也很好奇这样的场景可能会如何说明问题(利用?)。当然,最后一部分只是学术兴趣。
一般来说,没关系(没有明显的安全风险)。大多数软件,例如 shell,根据一些环境变量(如 PATH)搜索 unix 命令。因此,即使您创建的目录与“cd”之类的 unix 命令匹配,它也只能用作其他 unix 命令的参数,例如cd cd。
但是,如果另一个应用程序基于搜索某些目录等其他方法搜索 unix 命令,则可能会导致安全漏洞。
我认为这是一种风险的唯一方法是,如果您要转身通过命令行功能处理这些用户名。您需要小心地将用户名转义为可能被解释为命令的任何地方......尽管在我的脑海中,使用严格的字母数字用户名,您必须很麻烦才能运行陷入这样的风险。
如果您决定无论如何要确保用户名与创建过程路径上的应用程序不匹配,您可以从您的应用程序环境中退出,并评估which $prospectiveUsername
. 如果它返回空字符串以外的任何内容,则您知道用户名是进程路径上的应用程序。
注意:在上述情况下,请确保在调用 shell 命令之前清理用户名。否则,如果用户决定将她的用户名输入为“janedoe; rm -rf /”,则确实存在安全风险。