当前位置: 首页 > 编程笔记 >

为什么在Bash中应该避免eval,我应该用什么来代替呢?

关飞翼
2023-03-14
本文向大家介绍为什么在Bash中应该避免eval,我应该用什么来代替呢?,包括了为什么在Bash中应该避免eval,我应该用什么来代替呢?的使用技巧和注意事项,需要的朋友参考一下

eval是Bash shell的内置命令,它将其参数连接为单个字符串。然后,它将参数与空格连接起来,然后将该字符串作为bash命令执行。以下是其工作方式的示例。

eval示例

在下面的示例中,我们使用一个字符串,该字符串中内置了一些Unix命令,然后对其应用eval。

$ var="echo n"
$ echo $var
$ eval $var

运行上面的代码给我们以下结果-

echo n
n

如您所见,当应用eval时,变量展开,它将作为命令执行,而不再只是字符串。

eval问题

当我们创建一些包含函数的变量或脚本时,可以将一些值推入可能具有潜在危险的变量或函数。例如,可以将删除文件命令传递到接受用户参数的脚本。脚本的所有者将具有删除文件特权,但调用脚本的用户则没有。

考虑下面的脚本,我们在其中调用一个函数,其中包含一个eval函数。

Printa_rray() {
   in_array=$1
   eval echo "\"The first vale in the array is \${$in_array[0]}\""
}
fruits=(apple, orange, grapes,berry)
print_array fruits

运行上面的代码给我们以下结果-

The first vale in the array is apple.

以上结果是预期的。但是,假设用户使用以下参数调用该函数。

print_array() {
   in_array=$1
   eval echo "\"The first vale in the array is \${$in_array[0]}\""
}
fruits=(apple, orange, grapes,berry)
print_array 'x}"; cal; #'

运行上面的代码给我们以下结果-

The first vale in the array is
December 2019
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

如您所见,由于脚本中存在eval函数,因此使用该函数能够完全绕过acript的预期功能。如果用户将诸如rm *。*之类的命令作为acript参数传递,则可能会很危险。

eval替代

由于上述含义,因此可以使用一些可用的替代方法,这些替代方法不会造成此类安全威胁。

使用token_quote可以使男性评估更安全。

 类似资料:
  • 问题内容: 一次又一次,我看到Bash在Stack Overflow上使用了答案,而答案被猛烈抨击了,旨在使用这种“邪恶的”构造。为什么这么邪恶? 如果不能安全使用,我应该怎么用呢? 问题答案: 这个问题比眼前的问题还重要。我们将从显而易见的内容开始:具有执行“脏”数据的潜力。脏数据是指尚未重写为XYZ的任何数据;在我们的例子中,它是未格式化的任何字符串,以确保评估安全。 乍看之下,对数据进行消毒

  • 对于与PropertyValueFactory相关的问题,许多回答(和评论)建议避免使用该类和其他类似类。使用这个类有什么问题?

  • 问题内容: 看看这个: 我运行了一个快速的Google搜索,但找不到答案- 我应该用什么代替? 问题答案: 由于django 1.7 引入的迁移系统而被弃用。 现在,您可以使用 跟踪 更改。这会将您的模型更改转换为python代码,以使其可部署到另一个数据库。当您需要对数据库进行进一步的修改时,可以使用数据迁移。 创建迁移后,您必须 应用 它们:。 因此,除了使用之外,您还应该使用然后。 更改模型

  • 问题内容: 看看这个: 问题答案: 由于django 1.7引入的迁移系统而被弃用。 现在,你可以使用跟踪更改。这会将你的模型更改转换为python代码,以使其可部署到另一个数据库。当你需要对数据库进行进一步的修改时,可以使用数据迁移。 创建迁移后,你必须应用它们:。 因此,除了使用之外,你还应该使用然后。 更改模型中的某些内容后,开发工作流程如下: 在你的生产系统上: 奖励:你无需migrate

  • 这个方法有什么用? 我可以用另一种方法替换它以获得相同的结果吗?

  • 问题内容: 大约一周前,我已经从表格设计跃升为CSS,此后一直在阅读更多内容。昨天,我在SO上读了一篇长文章,那里的海报使floats 敲响,以及它们的贬值程度。有很多关于使用它代替的讨论。 我有一个刚刚完成的HTML5设计,它在firefox和chrome中看起来很棒,但是当从运行Internet Explorer版本7、8和9的其他计算机上进行测试时,该设计绝对 会爆炸 。这 似乎 对我这个设