【发布时间】:2020-12-03 12:07:22
【问题描述】:
我想知道是否有办法从我的代码中删除 eval()。
在此函数中,我通过 POST 加载一些变量,以根据管理员在表单中插入的内容在我的数据库中更新或插入新用户。
public function alterUser()
{
$name = $_POST['name']; //required field
$contact = $_POST['contact']; //required field
$password = $_POST['password']; //required field
$string = "DB::table('users')";
if(isset($_POST['id'])){
$string = $string."-> where ('id', \$_POST['id']) ->update([";
}else{
$string = $string."-> insert([";
}
$string = $string."'name' => \$_POST['name'],";
if (isset($_POST['email']))
$string = $string."'email' => \$_POST['email'],";
$string = $string."'password' => Hash::make(\$password),'contacto' => \$contact,";
if (isset($_POST['nif']))
$string = "$string.'nif' => \$nif,";
$string = $string."]);";
eval($string);
return redirect('/user');
}
由于这会打开一些安全漏洞,还有其他替代方法可以使其正常工作吗?
【问题讨论】:
-
良好的代码缩进将帮助我们阅读代码,更重要的是,它将帮助您调试代码Take a quick look at a coding standard 为您自己的利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
-
谢谢! @RiggsFolly。
-
每当您有使用
eval()的冲动时,就狠狠地打自己一巴掌,然后尝试另一种方式。特别是这里完全不需要 -
这里绝对没有理由使用
eval()。您可以轻松地将每个字符串的值分配给变量以构建查询构建器对象。哎呀,建立一个值数组,然后决定如何处理它 -
我还应该提到,Stackoverflow 并不是真正发布要求代码清理和类似问题的网站。请为此使用 CodeReview:codereview.stackexchange.com。您在此处获得答案的原因是您的问题包含在不必要的情况下使用
eval()的不安全做法,但通常,这类问题被否决并关闭。