对字符串数学使用 PHP eval 的风险

Risks of using PHP eval for string math

我有一个关于 eval() 安全风险的问题

这是我自己的代码

<?php

$str = 'nabi<'.$_GET['hackme']; // $_GET['hackme']=2;

$str = str_replace("nabi", 1, $str);

$hmm = eval('return ('.$str.');');

if($hmm){
    echo 'yeah';
}
else{
    echo 'no';
}

结果将是:

yeah

我的代码运行良好

这就是我想要的!

但是我怕有安全隐患!

请提供新的解决方案

安全性为零...传递给 hackme 的每个代码都将被执行。

如果您所做的只是检查某个值是否小于 1,请将 $_GET['hackme'] 类型转换为 int 或 double。

$str = 'nabi<' . (int) $_GET['hackme'];