为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要避免使用BASH,我应该使用什么呢?

为什么要避免使用BASH,我应该使用什么呢?

守着一只汪 2019-06-14 16:39:35
为什么要避免使用BASH,我应该使用什么呢?一次又一次,我看到堆栈溢出上的Bash答案eval答案被抨击,双关有意,用于使用这样的“邪恶”结构。为什么eval这么邪恶?如果eval不能安全使用,我应该用什么?
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

如何制作eval安全

eval 能,会,可以要安全地使用-但它的所有论点都需要首先引用。以下是如何:

这个为你服务的功能:

function token_quote {
  local quoted=()
  for token; do
    quoted+=( "$(printf '%q' "$token")" )
  done
  printf '%s\n' "${quoted[*]}"}

示例用法:

给定一些不受信任的用户输入:

% input="Trying to hack you; date"

构造一条命令以使val:

% cmd=(echo "User gave:" "$input")

把它,和.看似正确引用:

% eval "$(echo "${cmd[@]}")"User gave: Trying to hack youThu Sep 27 20:41:31 +07 2018

注意你被黑了。date被执行而不是按字面印刷。

代之以token_quote():

% eval "$(token_quote "${cmd[@]}")"User gave: Trying to hack you; date%

eval不是邪恶-它只是被误解了:)


查看完整回答
反对 回复 2019-06-14
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

关于

ls -la /path/to/foo | grep bar | bash

(ls -la /path/to/foo | grep bar) | bash

?


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 908 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信