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