PHP:我有一个字符串,里面有一个数学运算。我如何运行它?

PHP:我有一个字符串,里面有一个数学运算。我如何运行它?,php,math,Php,Math,(请注意,它是用户输入的,因此我无法硬编码)。无论如何,用户输入math.php?do=2+2,脚本将返回4。另一件事是输入经过严格验证,因此不存在恶意的可能性。我的测试方法是这样的 function testMath($char){ $array['math'] = Array("+", "-", "/", "*", "(", ")", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); foreach($char as $ch

(请注意,它是用户输入的,因此我无法硬编码)。无论如何,用户输入math.php?do=2+2,脚本将返回4。另一件事是输入经过严格验证,因此不存在恶意的可能性。我的测试方法是这样的

function testMath($char){
    $array['math'] = Array("+", "-", "/", "*", "(", ")", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
    foreach($char as $chr){
        if(!in_array($chr, $array['math'){
            return false;
        }
    }
    return true;
}
评估()由此检查的内容是否安全?或者我应该忘记从用户输入的输入中计算吗

旁注,PHP抛出

Parse error: parse error in C:\Users\Josh\Desktop\App\html\new.php(24) : eval()'d code on line 1

当我试图评估某事时。怎么了?

我不确定您是如何使用eval()的,因为您没有发布代码的这一部分。但是,如果要计算代码,则需要指定它将保存到的变量:

修订测试数学:

function testMath($char){
    if(strlen($char) > 10) return false;
    $array['math'] = Array("+", "-", "/", "*", "(", ")", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
    foreach($char as $chr){
        if(!in_array($chr, $array['math'){
            return false;
        }
    }
    return true;
}

$math = $_GET['do'];
if(testMath($math)) eval("$result = " . $math . ";");

echo $math, ' = ', $result;

你为什么不直接用javascript计算一下用户端呢?风险小得多的
eval
在用户输入的情况下会有一些明显的安全问题。。您的测试似乎还可以,但您可能还需要限制长度。调用
eval
或使用已创建的内容时会是什么样子:
$sanitizedUserInput
需要hella消毒。上面提供的testMath()函数可能就足够了。。。我会在上面添加一个字符限制,就像tandu之前提到的那样。。。