assert()不会自动评估代码

时间:2018-09-04 22:44:34

标签: php code-injection assert

我的PHP版本是7.2.9-1。在以下练习中,第assert行有代码注入:

extract($_POST);
function goAway() {
    error_log("Hacking attempt.");
    header('Location: /error/');
}

if (!isset($pi) || !is_numeric($pi)) {
    goAway();
}

if (!assert("(int)$pi == 3")) {
    echo "This is not pi.";
} else {
    echo "This might be pi.";
}

操作assert()评估PHP代码,其中包含用户输入。但是,我使用了pi=phpinfo(),而服务器没有phpinfo(),而只输出了This might be pi.。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

摘自PHP手册:

  

断言不应用于正常的运行时操作,例如输入参数检查。根据经验,如果未激活断言检查,您的代码应始终能够正常工作。

有可能在PHP配置中只是禁用了断言。检查您的php.ini文件或assert_options()

此外,根据您提供的代码示例,不是打算使用assert