为什么在严格的preg_match之后,PHP 7 eval()仍然不安全?
因此,我有一个严格过滤的代码,因此仅允许使用运算符,括号和数字。人们似乎仍然反对使用它,但是除了“哦,这很危险”之外,没有人向我具体说明原因。
那么如何利用以下代码?
以下程序
1.从网址获取查询字符串
2.通过preg_match
进行过滤
3. eval()
<?php
$exp = $_SERVER["QUERY_STRING"];
if(preg_match('~^[0-9()+\-*\/]+$~', $exp)){
eval("echo $exp;");
} else {
echo "ERROR";
}
?>
编辑: https://www.exakat.io/land-where-php-uses-eval/
该网站还讨论了如何将eval()
用于Evaluating math or logical expression
,这是错误的吗?