2
我知道使用ORM如构建查询的Doctrine2是安全的,这意味着参数在默认情况下会被转义。这个小Doctrine2动态SQL足够安全的注入吗?
但我猜测,这个用文字时,当这个文字从查询字符串直接来就不是那么明显:
$builder = $this->getRepository()->createQueryBuilder('e');
$request = $this->getRequest();
// Loop each allowed filter field and check if exists in $request
foreach($this->getFilterFields() as $filter) :
// Skip falsy values in $request
if(!$value = $request->get($filter)) continue;
// Add OR LIKE %$value% where $value is GET paramter
$like = $builder->expr()->literal("%$value%");
$builder->orWhere($builder->expr()->like("e.$filter", $like));
endforeach;
安全应该以某种方式加以改进?
谢谢。是的,$ this-> getFilterFields()列出了所有有效的搜索字段,因此任何无效的argumetn都将被忽略。 – Polmonino 2012-03-20 18:48:14