我需要通过读取用户上传的文本文件来获取变量值。
我正在根据系统脚本执行操作:
resourceVersion=`cat userFile.txt`
mkdir $resourceVersion
...
当我稍后使用该$resourceVersion
变量作为其他命令的参数时,该文件的内容是否会以任何方式损害系统?
答案1
编写安全代码的规则 1:你必须净化你的用户输入。
至少传递--
到你的 mkdir 子句以防止操作开关。
目前它可以用于在任意位置以任意权限创建目录。
就其本身而言,它可能不会导致违规,但你可以传递如下内容:
-m 0777 /var/lib/mysql/newdb
创建任何人都可以写入的新 mysql 数据库。
这里也可能存在拒绝服务攻击,因为每个空间都被视为一个新目录,因此您可以传递 32760 个新路径进行处理。
最后,一些伪文件系统对新目录的敏感程度可能超出您的预期。例如,在 Fedora 上,像 这样的目录/sys/fs/cgroup/newcgroup
可能会创建一个新的 cgroup。此外,在 LIO 子系统中,将目录写入/sys/kernel/config/target
可用于通过 iscsi 网络导出块设备(然后可以复制设备的全部内容)。
所以,不要这样做。
答案2
目前,如果 userFile.txt 包含以下内容,我可以添加一个全球可写的文件夹。-m 777 /.secretstorage
在我看来,这已经够糟糕了,不能使用这样的构造。
确实,使用您发布的当前脚本无法注入其他命令。
但根据您将使用此变量的其他命令,情况可能会变得更糟。
例如,如果您计划使用此变量在程序结束时进行清理,并且rm
...