Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Eval(),what';重点是什么?_Php_Eval - Fatal编程技术网

Php Eval(),what';重点是什么?

Php Eval(),what';重点是什么?,php,eval,Php,Eval,关于eval()作为函数的官方文档说: 除其他外,这对于将代码存储在数据库文本字段中以供以后执行非常有用 我对此感到非常困惑。PHP文档是否建议将PHP行存储到数据库中?什么?那不是很不安全吗 如果我知道数据库中有一个作为PHP执行的字符串呢?那不是非常危险吗?我只需要Sql注入就可以对该站点执行任何操作,我想做的任何操作。我可以删除整个数据库,我可以从脚本中获得一切,我可以做一切 这怎么会这么有帮助呢 你能给我举一些例子说明这个eval()是如何有用的吗? 另外,我可能遗漏了一些东西,为什么我

关于
eval()
作为函数的官方文档说:

除其他外,这对于将代码存储在数据库文本字段中以供以后执行非常有用

我对此感到非常困惑。PHP文档是否建议将PHP行存储到数据库中?什么?那不是很不安全吗

如果我知道数据库中有一个作为PHP执行的字符串呢?那不是非常危险吗?我只需要Sql注入就可以对该站点执行任何操作,我想做的任何操作。我可以删除整个数据库,我可以从脚本中获得一切,我可以做一切

这怎么会这么有帮助呢

你能给我举一些例子说明这个
eval()
是如何有用的吗? 另外,我可能遗漏了一些东西,为什么我会看到一些代码,如:

eval("if (is_int($int)) { return false }");
而不仅仅是

if (is_int($int)) { return false }
但是,正如我所说,我可能遗漏了一些东西:什么?

eval()函数太棒了!人们一直在使用它来注入代码,并获得对服务器的良好访问。您经常会看到
eval()
和regex函数的使用,该函数在坏的WordPress安装中也会执行


你需要评估的理由很少。例如,如果我正在创建一个PHP测试站点,人们可以在该站点上输入一些代码,然后运行它。当然,出于您列出的原因,需要首先对其进行消毒。

假设您有一个允许您键入PHP代码的CMS。我可以看到使用
eval
函数来计算PHP代码片段。出于同样的原因,Javascript也有eval


撇开所有原因不谈,eval是非常不安全的。我同意永远不应该使用它

你可以吃类似的东西

$text = 'This is some random number: $number. Hello world!';
...
$number = 15;
...
eval ("\$replacedText = \"$text\";");

在eval中,$文本将被替换为“这是一个随机数:$number.Hello world!”,eval确保$number也被替换为15

是的,这可能非常危险。我见过它使用的一个地方是一个系统,它允许对搜索屏幕进行非常复杂的配置,并允许用户保存搜索配置。搜索的详细信息保存为实际代码,作为eval执行。输入单独存储,并进行检查(在某种程度上,我不知道细节),以防止SQL注入。这是我唯一一次看到这样做,而且可能没有必要这样做(尽管我从来没有看到过足够的这个系统来确定)

eval()
在运行时之前不知道需要执行什么代码时可能很有用(如我上面给出的示例),但对于大多数开发人员来说,这些情况并不是每天都会发生的事情。如果您遇到需要
eval()
的情况,请确保从不直接向用户传递输入。如果您能找到一种方法来约束(在某种程度上)将要传递给它的代码,那就更好了,但这取决于手头的问题

你能给我举几个例子说明这个eval()是如何有用的吗

例如,模板引擎使用它。它们将模板解析并编译为PHP代码,可以将代码存储到任何位置,也可以使用
eval()
直接执行


除此之外,它是一个危险的特性。

事实上,它是不安全的,无论如何,您都必须清理代码

但是,其目的不是评估用户引入的表达式或任何其他方式(如从DB引入的表达式)

我发现当语言不提供元编程时,它是有用的。因此,例如,您需要用50个调用相同但方法名稍有不同的字段(例如数字)填充一个bean(假设它有field1()、field2()、field3()…等等),然后您可以在for中使用eval:将方法名构造为字符串,然后调用它


通过这种方式,你可以在5行代码中转换100行重复的代码,如果你想添加关于其工作原理的文档,还可以再转换几行。这不是不安全的,因为这里没有其他人接触你的代码。

问得好。我不知道
eval()。但是我在听…这一点似乎已经深入到了地下,
eval()
是不好的,我们明白了。好了,写了一个小脚本解析器,我可以证明eval有有效的用途。但除了边缘情况外,eval()只是include()的另一个名称,并不依赖于文件。eval是用来补充变量和直接处理sql字符串的。现在不想制造任何不公平或不平衡的东西!;-)总的来说,它在那里没关系。只是不要用它|那怎么办<代码>$text=str_replace(“$number”,“15”,“$text”)
做了完全相同的事情。@user576875:或者双引号?我想我遗漏了什么
$number
永远不会替换为带单(')的字符串。是吗?@Jonah,意大利现在是晚上,我很累,可能比平时更笨,但我不认为制造问题并用
eval()
解决它有任何意义@Charlie:我同意。我不是在为答案辩护,只是在解释它(不管它多么可笑)。“?”指的是答案,不是你;)你能给出一个模板引擎的例子吗?我会说其中的大多数;当然,这就是我讨厌模板引擎的原因。@Charlie Pigarelli:这不是讨厌它们的理由。如果缓存被禁用,他们仅将
eval
用作最后手段。此外:如果针对恶意代码对代码进行了正确检查,那么使用eval;)确实没有问题对不起,我应该指出这一点:这也是为什么,在成千上万的无意义的事情上,我讨厌Smarty这样的模板引擎。我永远不会使用它们,即使
eval()
不是脚本的一部分。因为他们一点感觉都没有。您可以使用PHP本身完成模板引擎的所有操作(