I使っSymfony
2.8プロジェクト内のDoctrine
と私はqueryBuilder
のaddOrderBy()
方法使用している場合、SQLインジェクションの危険性がある場合は疑問に思う:Doctrine 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...
問題があるのためのオプションは、ユーザーを介して受信されていることを、 ASC
またはDESC
の代わりに; DROP TABLE someTable
のようなものに操作できるフォーム入力。
は、私はすでにこれを試してみましたが、クエリビルダはもちろん
:-)他/より良い注入ができなかったことを、意味するものではありません;
、で区切られた複数のクエリを受け入れていないようです受信した結果をフィルタリングし、すべての無効な検索オプションをスキップすることで、問題を簡単に解決できます。しかし、一般的にaddOrderBy()
メソッドの場合、私は理解しようとしています。 メソッドに値を渡すのが節約され、Doctrine
が残りを処理しますか、または潜在的なリスクはありますか?
->where()
を使用する場合のように、->setParameter()
メソッドが機能しないのはなぜかと思います。
ありがとうございますが、質問で説明したように、保存フィルタ機能を探すのではなく、最初に 'addOrderBy()'が危険にさらされているかどうかについてです。 –
だから、 'Expr'を使ってください。 – rogeriolino
私は 'Expr'を使いたくありません:)' addOrderBy() 'を使う上でリスクがあるかどうかを知りたいのですが.. –