gpt4 book ai didi

php - 如何在 php 中安全地使用 eval?

转载 作者:可可西里 更新时间:2023-11-01 01:09:30 25 4
gpt4 key购买 nike

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

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

这显然是一个简化的案例,但是用户可以输入什么作为 version 来让它做一些恶意的事情吗?如果我限制 $test 可以采用的字符串类型来将某些变量的值与其他变量进行比较,有没有任何人可以看到利用它的方法?

编辑

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

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

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

最佳答案

哦,天哪!

$version = "exec('rm-rf/...') + 4"; // Return 4 so the return value is "true" 
// after all, we're gentlemen!
$test = "return $version > 3";
eval($test);

:)

在这种情况下,您必须至少对输入值执行 filter_var()is_numeric()

顺便说一下,您使用 eval 的方式(将其结果赋给 $success)在 PHP 中不起作用。您必须将赋值放入 eval()ed 字符串中。

关于php - 如何在 php 中安全地使用 eval?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4400021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com