使用PHP eval进行字符串数学运算的风险

时间:2015-02-18 15:15:07

标签: php eval

我对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

我的代码运作良好

这就是我想要的!

但我担心安全风险!

请提供新的解决方案

2 个答案:

答案 0 :(得分:1)

如果你所做的只是检查是否小于1,则将类型$_GET['hackme']强制转换为int或double。

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

答案 1 :(得分:0)

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