MST

星途 面试题库

面试题:Bash脚本的函数安全审计要点

在Bash脚本中定义一个带有参数的函数,用于处理文件读取操作。请说明在这个函数编写过程中,从安全审计角度,可能存在哪些风险点以及如何防范?
25.5万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

可能存在的风险点:

  1. 命令注入风险:如果函数参数直接拼接在文件读取命令中,未经过适当的过滤,恶意用户可能通过传入恶意命令,如; rm -rf /等,执行非预期的危险操作。例如:cat $1,若$1被恶意构造,就会引发命令注入。
  2. 路径遍历风险:当函数处理文件路径参数时,如果没有对路径进行有效验证,攻击者可能利用../等相对路径符号,访问到非预期的文件,泄露敏感信息。比如函数读取用户输入路径的文件,但未检查路径合法性,攻击者传入../../etc/passwd
  3. 文件存在性及权限风险:若函数没有对文件是否存在及文件权限进行合理检查,可能导致读取不存在文件时出现错误,或者在没有权限的情况下尝试读取文件,造成脚本执行异常。例如,直接尝试读取一个没有读取权限的文件。

防范措施:

  1. 命令注入防范:使用bash内置的read命令的安全特性,如read -r line < <(command)方式读取文件内容,避免直接将参数拼接到命令中。如果一定要拼接,使用printfeval的安全组合,如printf '%s\n' "$1" | eval "cat",并且在eval之前对$1进行严格的参数验证,只允许合法字符。
  2. 路径遍历防范:使用realpath命令规范化路径,然后检查规范化后的路径是否在预期的目录范围内。例如:
real_path=$(realpath "$1")
allowed_dir="/expected/directory"
if [[ $real_path != $allowed_dir/* ]]; then
    echo "Invalid path"
    return 1
fi
  1. 文件存在性及权限防范:在读取文件前,使用test命令或[ ]条件判断文件是否存在且具有可读权限。例如:
if [ -r "$1" ]; then
    cat "$1"
else
    echo "File does not exist or is not readable"
    return 1
fi