面试题答案
一键面试常见安全风险及预防措施
- 命令注入风险
- 风险描述:如果脚本接受用户输入并直接将其作为命令执行,恶意用户可能输入恶意命令,导致脚本执行非预期操作,如删除文件、窃取数据等。例如,脚本中有
command $input
,若input
被恶意赋值为; rm -rf /
,就会造成严重后果。 - 预防措施:对用户输入进行严格验证和过滤,只允许特定格式和内容的输入。避免直接将用户输入作为命令的一部分执行,可以使用
eval
等函数时格外小心,或者采用参数化的方式。比如使用echo "$input" | some_command
替代command $input
。
- 风险描述:如果脚本接受用户输入并直接将其作为命令执行,恶意用户可能输入恶意命令,导致脚本执行非预期操作,如删除文件、窃取数据等。例如,脚本中有
- 文件包含风险
- 风险描述:在脚本中使用
source
或.
来包含外部文件时,如果外部文件路径可被恶意用户控制,他们可能提供恶意脚本,从而使主脚本执行恶意代码。 - 预防措施:确保包含的文件路径是固定且受信任的,避免从不可信来源获取文件路径。若必须使用变量指定文件路径,要对变量进行严格校验,确保其指向合法且安全的文件。
- 风险描述:在脚本中使用
- 权限不当风险
- 风险描述:脚本在执行过程中可能以过高的权限运行,例如以 root 权限执行一些不必要的操作,一旦脚本存在漏洞,恶意用户利用漏洞可获取高权限,造成严重安全问题。
- 预防措施:尽量以最低权限运行脚本,仅在必要时提升权限。例如,若脚本大部分操作不需要 root 权限,先以普通用户权限运行,仅在特定需要高权限的操作时,通过
sudo
等机制临时提升权限,并在操作完成后恢复到普通权限。
- 未初始化变量风险
- 风险描述:使用未初始化的变量可能导致不可预测的行为,恶意用户可能利用这种不确定性来操纵脚本执行流程。例如,脚本中使用
$var
,但$var
未初始化,在某些情况下可能被解释为一个空字符串,而在其他情况下可能产生错误,攻击者可利用这种不一致性。 - 预防措施:在使用变量前明确初始化变量,或者在脚本开头设置
set -u
,这样当脚本尝试使用未初始化的变量时会立即报错,便于发现和修复问题。
- 风险描述:使用未初始化的变量可能导致不可预测的行为,恶意用户可能利用这种不确定性来操纵脚本执行流程。例如,脚本中使用