微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在php中安全使用eval?

我知道,只要有用户输入,有些人可能只会回答“从不”.但是假设我有这样的事情:

$version = $_REQUEST['version'];
$test = 'return $version > 3;';
$success = eval($test);

这显然是一种简化的情况,但是用户是否可以输入任何内容作为版本来进行恶意处理?如果我限制$test在比较某些变量的值和其他变量的值时可以采用的字符串类型,那么有人可以看到有什么方法可以利用该字符串吗?

编辑

我尝试在服务器上运行以下脚本,但没有任何反应:

<?PHP
  $version = "exec('mkdir test') + 4";
  $teststr = '$version > 3;';
  $result = eval('return ' . $teststr);
  var_dump($result);
?>

我得到的只是bool(false).没有创建新目录.如果我之前有一行实际调用exec(‘mkdir test’)的行,则实际上会创建目录.它似乎工作正常,因为它只是将转换为数字的字符串与另一个数字进行比较,发现结果为假.

解决方法:

如果您这样做.只接受整数.

如果必须接受字符串,则不要.

如果您仍然认为必须这样做.别!

最后,如果仍然如此,则认为您需要字符串.只是不要!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐