我的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.
。有人可以解释一下吗?
答案 0 :(得分:0)
摘自PHP手册:
断言不应用于正常的运行时操作,例如输入参数检查。根据经验,如果未激活断言检查,您的代码应始终能够正常工作。
有可能在PHP配置中只是禁用了断言。检查您的php.ini
文件或assert_options()
。
此外,根据您提供的代码示例,不是打算使用assert
。