【发布时间】:2018-10-08 17:51:10
【问题描述】:
有没有一种安全的方法来为 Yii2 ORM 生成带有 查询字符串 参数的条件子句? 例如,我们需要一些食品的列表,按属性过滤:
GET /food/?weight[>]=1000&calories=[<]=200
产品有很多不同的属性:重量、卡路里、数量、价格。
我希望可以写出类似(简化代码)的东西:
$query = new \yii\db\Query();
foreach ($_GET as $parameter => $condition){
foreach ($condition as $operator => $value){
$query->where(new SimpleCondition($parameter, $operator, $value));
}
}
但我怀疑这种方法安全。
所以,有三个问题:
- 如何安全地从 url 定义属性?我们可以在
ActiveQuery::where子句中使用查询字符串参数names(而不是values)吗? - 如何正确定义
IN, AND, OR, >, <, >=, <=, etc.等运算符? - 是否有任何用于过滤的原生 Yii2 组件或者我应该使用第三方模块?
【问题讨论】:
-
这绝对不安全——这段代码易受 SQL 注入攻击。
-
@rob006 那么,正确的方法是什么?
标签: php yii2 query-string sql-injection