gpt4 book ai didi

php - 以这种方式处理方程式是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:05 24 4
gpt4 key购买 nike

我正在使用用户提供的字符串,例如“m*0.2”,其中“m”是 $value 并评估该字符串。允许用户使用 4 种基本数学运算符、小数和负数。省略任何使用其他任何东西的尝试。

$equation = $metric['formatter'];

$equation = preg_replace("/[^0-9*m.\/\+\-]/", "", $equation); //strips extra params

if (strlen($equation) > 1) {
$equation = str_replace("m", ' $value ', $equation);

$code = '$newValue = '.$equation.';';

if (validExec($code)) { //validates syntax
eval($code);

$newValue = (int) $newValue; //unnecessary security step?

if ($newValue != 0) {
$value = $newValue;
}
}
}

function validExec($code) {
$code = escapeshellarg('<?php ' . $code . ' ?>');

$lint = 'echo $code | php -l'; // command-line PHP

// maybe there are other messages for good code?
return (preg_match('/No syntax errors detected in -/', $lint));
}

我想知道我的方法是否 100% 安全地允许上述运行。

最佳答案

我也在研究修复对用户输入的公式进行求值的代码。

您所做的似乎是为了防止任何用户恶意代码在您的服务器上运行,因为它们只允许使用字母 m、数字和数学运算符。

然而,它只需要一个明亮的 Spark 就可以找到绕过它的方法,以破坏您的系统,我认为大多数人会同意允许评估用户输入可能不是好的做法,无论您对其进行多少验证.

当我研究我的问题时,我开始寻找公式处理库,例如电子表格中使用的库。类似 Excel 的库将采用数学表达式并能够安全地计算它们。

我从来没有抽出时间来测试它,但希望如果你能找到合适的,你甚至可以向后兼容你现有的公式。

祝你好运。

关于php - 以这种方式处理方程式是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802525/

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