我正在写一个bash脚本,它需要几个用户输入,主要是目录路径和文件名。该程序将创建指定的目录和文件。在Bash/Shell脚本中的安全输入验证
当写的目录路径,我要求绝对路径 - 〜/ DIR/...,或$ PATH/DIR/...或./DIR/...不准。目录路径只应以/DIR/DIR/...的形式提供,文件路径格式为/DIR/DIR/.../filename,文件名格式为,文件名为。 我也想确保用户没有添加任何命令行选项(例如,如果我运行sudo,我想确保用户没有在他们的输入中的任何地方附加-u)。
但是,由于目录路径和文件名可能包含破折号,下划线,空格,句点和字母数字字符,因此我并不完全确定清理其输入的最佳方式。任何其他角色都应该被检测到。
用户输入通过收集读取。我使用的是Ubuntu系统,只要符合Ubuntu shell,它就可以工作。 假设只安装了默认的系统软件包。
多个选项是可以接受的,以处理验证的各个部分(例如,使用--
治疗下列数据作为用于处理目录路径的参数,而不是一个命令[由Siguza建议],然后另一种选择)。
正确映射目录结构需要绝对路径。由于我在路径字符串上执行的功能,任何其他格式的路径都会导致程序在匹配或附加到其他路径时错误地解释结构。
谢谢。
什么工作:我以前接受的答案,用在某些情况下的真实路径和的readlink,并使用-解释下面的文本作为参数。如果你想允许相对路径,那么使用readlink或realpath的结果作为你的路径。如果您想禁止相对路径,请将原始字符串与readlink或实时路径的结果进行比较。
大多数命令都支持“ - ”选项,这使得它们将所有以下参数视为参数,而不是选项/标志。除此之外,将所有变量用双引号括起来以避免扩展。 – Siguza
虽然这确实处理了前两个问题,但用户仍然可以使用我的程序无法接受的格式整个目录路径。我或者需要拒绝无效输入,或者将其符合有效输入。 –
回复:“用户可以使用我的程序无法接受的格式存放整个目录路径,我需要拒绝无效输入,或将其符合有效输入”:*或*您可以更改程序以接受此类格式。 。 。 – ruakh