Doctrine2のEntityRepository::findBy()
を使用しても、私は渡した値をエスケープする必要がありますか?EntityRepository :: findBy()を使用するときに値をエスケープする必要はありますか?
$em->getRepository('User')->findBy(array('name' => $_POST['name']));
^need to escape?
Doctrine2のEntityRepository::findBy()
を使用しても、私は渡した値をエスケープする必要がありますか?EntityRepository :: findBy()を使用するときに値をエスケープする必要はありますか?
$em->getRepository('User')->findBy(array('name' => $_POST['name']));
^need to escape?
短い答え:いいえ、あなたはないを行います。
長い答え:エスケープはデータベースレベルの低レベルの問題で、Doctrineの抄録のような高レベルのものがあります。 Doctrineを使って作業するときは、ドメインモデルをどのように基礎となる永続性テクノロジ(この場合はSQLクエリ)に変換するかということではなく、ドメインモデルのクエリにのみ気を付ける必要があります。
データベースライブラリは自然にSQLインジェクションセキュリティの脆弱性のクラスに当てはまります。 DoctrineがどのようにSQLインジェクションを防ぐことができるかどうかを理解するために、以下の情報を注意深く読んでください。
一般に、DoctrineのAPIはユーザーの入力に対して安全ではないと想定する必要があります。ただし、いくつかの例外があります。
Doctrine\DBAL\Connection#insert($table, $values, $types)
について
Doctrine\DBAL\Connection#update($table, $values, $where, $types)
とDoctrine\DBAL\Connection#delete($table, $where, $types)
$values
と$where
のみ配列値: 次のAPIは、SQLインジェクションから安全であるように設計されています。 $ valuesと$のテーブル名とキーはで、はエスケープされていません。
Doctrine\DBAL\Query\QueryBuilder#setFirstResult($offset)
$limit
と
$offset
パラメータの
Doctrine\DBAL\Query\QueryBuilder#setMaxResults($limit)
Doctrine\DBAL\Platforms\AbstractPlatform#modifyLimitQuery($sql, $limit, $offset)
は、ユーザー入力のために安全ではないことへの他のすべてのAPIを考えてみましょうDDL SQL文
これらのシナリオでユーザー入力をエスケープするには、Connection#quote()
メソッドを使用します。
ソース:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/security.html