首先,对不起我的英语! 当我需要更改搜索语句时,我尝试在CakePHP中进行动态选择。我知道可以使用变量来做到这一点,但我想到SQL注入。还有其他办法吗?
示例:
$var = "quantidade";//$var can be other values.
$query->find('')->select('quantidade' => $var);
答案 0 :(得分:0)
与使用Query::where()
语法的key => value
等其他地方不同,Query::select()
中没有SQL注入预防机制,传递给此方法的值将被插入到查询中(他们可能会被引用,但没有逃脱),所以你必须自己保护这个。
我建议使用白名单,硬编码:
$allowedFields = [
'field_a',
'field_b'
];
if (in_array($var, $allowedFields, true)) {
$query = $Table
->find()
->select([
'alias' => $var
]);
}
或从表架构中检索到的,如果您想要允许所有字段,但小心,只有在将所有可能的列公开给用户绝对安全时才执行此操作!
$allowedFields = $Table->getSchema()->columns(); // use schema() in CakePHP < 3.4
另见