暗无天日

=============>DarkSun的个人博客

编写安全的shell脚本

确保运行的命令是你想要的

  • 使用绝对路径引用命令
  • 不要在 PATH 中设置 ., 如果一定要放,把 . 放到最后一项

不要在脚本中记录密码

对用户输入进行转义处理

例如下面这段代码

echo -n "What file do you seek? "
read name
ls -l $name

若用户输入 .;/bin/rm -Rf / 那问题就大发了。

一个简单的处理方式是用双引号将用户输入引起来,即改成

ls -l "$name"

但依然存在危险,比如用户可以输入 .;$(/bin/rm -Rf /)

因此一个比较好的方法是扫描用户输入,若发现特殊字符则提示错误。

shopt -s extglob
echo -n "What file do you seek? "
read name
if [[ "$name" != +([[:word:][:space:]]) ]];
then
    echo "ERROR FILE"
    exit 1
fi
ls -l $name