如果来自HTML的IF语句参数在前端传递?

时间:2015-02-24 17:15:44

标签: php function user-input

我希望用户能够通过在HTML中提供值来执行PHP中的if语句目前,如果用户以表格形式输入,我如何处理$expression 2 + 3 = 5 ”?

<form method="post" action="test.php">
   Evaluate <input type="text" required="required" name="expression" /><br />
   True <input type="text" required="required" name="returnOnTrue" /><br />
   False <input type="text" required="required" name="returnOnFalse" /><br />
   <input type="submit" name="submit" value="Run" />
</form>

然后在PHP中我有类似

的东西
function if_statement($expression, $true, $false) {

    try {

        if (    !empty($expression)
             && !empty($true) && ctype_digit($true)
             && !empty($false) && ctype_digit($false)
        ) {

            if ($expression) {
                return $true;
            } else {
                return $false;
            }

        }

        return;   

    } catch (Exception $e) {
        return;
    }

}

$expression = $POST["expression"];
$onTrue     = $POST["returnOnTrue"];
$onFalse    = $POST["returnOnFalse"];

echo call_user_func_array("if_statement", array($expression, $onTrue, $onFalse));

还有其他更安全的方法让IF语句接受用户输入以避免注入和/或致命错误。

1 个答案:

答案 0 :(得分:0)

我会说你需要逐个字符地解析输入字符以确定他们正在检查什么。如果不使用eval()或数据库交互,则不会出现安全问题。如果总是期望相同类型的简单表达式,则可以使用正则表达式来获取部分而不是解析。如果你想确保零件是数字,你可以转换为像

这样的整数
$expression = (int)$_POST['expression'];

顺便说一下if if($ expression),除非输入为空,或者数字小于1(0,0.5,-7),否则它应该总是返回true。因此需要一些解析或正则表达式。