如何知道在web服务器中禁用或启用了eval()。知道这个的PHP代码是什么?是否有任何启用它的PHP代码,如果在服务器上禁用它?
答案 0 :(得分:5)
PHP中没有内置功能可以让你禁用eval(与你可以禁用的其他功能不同)。
但是,您可以为PHP安装一个名为Suhosin的安全路径,它允许您禁用eval,并为PHP添加其他安全功能。
http://www.hardened-php.net/suhosin/configuration.html#suhosin.executor.disable_eval
答案 1 :(得分:5)
您应该能够确定 eval()
是否存在:
http://php.net/manual/en/function.function-exists.php
if (function_exists('eval')) {
echo "eval() exists, it does it does!";
}
修改强>
实际上,eval()
是一种语言结构,因此无法使用function_exists()
进行测试。但是,这应该有效:
<?php
$isevalfunctionavailable = false;
$evalcheck = "\$isevalfunctionavailable = true;";
eval($evalcheck);
if ($isevalfunctionavailable === true) {
echo "\$isevalfunctionavailable is true.\n";
echo var_dump($isevalfunctionavailable);
}
?>
答案 2 :(得分:3)
好的,如上所述,eval
不太可能被禁用。但为了以防万一,有三种解决方法:
$eval = create_function("", "$code");
$eval();
甚至只是:
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_QUIET_EVAL, 1);
assert("$code");
文件系统 - 解决方法:
file_put_contents($tmp=tempnam("/tmp", "EVAL"), "$code");
include($tmp);
所有工作都相当于直接评估。