假设我有一个名为的文件query.sql
,其中包含以下内容:
SELECT * FROM `users` WHERE `id`!=".$q->Num($_POST['id'])."
在我的 php-script 中,它有一个带有名为“id”的输入的 html 表单,我做了以下技巧:
$sql=file_get_contents('query.sql');
$query= eval("return \"$sql\";");
//here follows something like $mysqli->query($query); and so on..
我不担心sql 注入,因为我使用的是准备好的语句并$q->Num
执行is_int
检查。但是以这种方式使用 eval 是否安全?
据我了解,这里实际评估的是“${_POST['id']}”,它评估为用户输入的某个字符串值。只有当我第二次评估这个字符串时,这才会变得危险。虽然我仅在用户的输入只是字符串时才评估字符串,并且不能被编译器解释为 php 代码,并且不可能进行 php 注入。
更新 感谢您提出不同的方法并强调需要使用准备好的语句。但这根本不是我的问题。我的问题都是关于 php-injections 的。这样使用 eval 不好吗?如果是,为什么?