mich mit Doctrine
in einem Symfony
2.8 Projekt und ich frage mich, ob es ein Risiko von SQL Injections, wenn die addOrderBy()
Methode der queryBuilder
mit:Doctrine queryBuilder: SQL-Injection-Risiko in addOrderBy() -Methode?
// 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...
Das Problem ist, dass die Auftragsoptionen empfangen werden über die Benutzer Formulareingabe, die zu etwas wie ; DROP TABLE someTable
anstelle von ASC
oder DESC
manipuliert werden könnte.
Ich habe bereits versucht, diese, aber der Query Builder scheint nicht von ;
, getrennt mehrere Abfragen zu akzeptieren, was nicht bedeutet, dass es keine andere/besseren Injektionen :-)
Natürlich könnte die Problem könnte leicht gelöst werden, indem die empfangenen Ergebnisse gefiltert und alle ungültigen Suchoptionen übersprungen werden. Aber ich versuche zu verstehen, ob die addOrderBy()
Methode im Allgemeinen. Ist es sicher, irgendeinen Wert an die Methode zu übergeben, und Doctrine
erledigt den Rest, oder besteht ein potenzielles Risiko?
Ich frage mich, warum die Methode nicht funktioniert, wie es bei der Verwendung ->where()
wäre.
Vielen Dank, aber wie in der Frage erklärt, es ist nicht so viel über das Finden einer sicheren Filterfunktion, sondern darüber, ob 'addOrderBy()' ein Risiko an erster Stelle ist. –
Verwenden Sie 'Expr'. – rogeriolino
Ich möchte 'Expr' nicht verwenden :) Ich möchte verstehen, ob ein Risiko bei der Verwendung von' addOrderBy() 'besteht. –