我一個使用Doctrine
在Symfony
2.8的項目,我不知道是否有SQL注入的風險使用queryBuilder
的addOrderBy()
方法時:學說queryBuilder:addOrderBy()方法中的SQL注入風險?
// Order options. Real code does not specify this manually, but receives
// the options via user form input
$orderBy' = array(
'column1' => 'ASC',
'column2' => 'DESC',
...
'columnN' => 'ASC',
);
$qb = $this->em->createQueryBuilder();
...
foreach ($orderBy as $column => $orderOption) {
$qb->addOrderBy("e.$column", $orderOption);
// Does not work:
// $qb->addOrderBy("e.$column", ':orderOption')
// ->setParameter('orderOption', $orderOption);
//
// Error: Expected end of string, got ':orderOption'"
}
// Result is something like:
...ORDER BY e0_.column1 ASC, e0_.column2 DESC...
的問題是,該命令選項可通過用戶收到表單輸入可以被操縱爲像; DROP TABLE someTable
而不是ASC
或DESC
。
我已經嘗試過這一點,但查詢生成器似乎並不接受;
,分隔的多個查詢,這並不意味着,這不可能有任何其他/更好的注射:-)
當然的了問題很容易通過過濾收到的結果並跳過所有無效的搜索選項來解決。但我想明白,如果一般的addOrderBy()
方法。 爲方法傳遞任何價值並且Doctrine
會處理剩下的問題還是存在潛在風險,是否存儲?
我不知道爲什麼->setParameter()
方法不起作用,就像使用->where()
時那樣。
謝謝你,但正如在問題中解釋的那樣,它不是關於尋找保存過濾器函數,而是關於如果addOrderBy()在第一個位置是風險。 –
所以,使用'Expr'。 – rogeriolino
我不想使用'Expr' :)我想了解使用'addOrderBy()'是否存在風險。.. –