eval是Bash shell的内置命令,它将其参数连接为单个字符串。然后,它将参数与空格连接起来,然后将该字符串作为bash命令执行。以下是其工作方式的示例。
在下面的示例中,我们使用一个字符串,该字符串中内置了一些Unix命令,然后对其应用eval。
$ var="echo n" $ echo $var $ eval $var
运行上面的代码给我们以下结果-
echo n n
如您所见,当应用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参数传递,则可能会很危险。
由于上述含义,因此可以使用一些可用的替代方法,这些替代方法不会造成此类安全威胁。
使用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的其他计算机上进行测试时,该设计绝对 会爆炸 。这 似乎 对我这个设