2011-12-11 2 views

答えて

5

短い答え:いいえ、あなたはないを行います。

長い答え:エスケープはデータベースレベルの低レベルの問題で、Doctrineの抄録のような高レベルのものがあります。 Doctrineを使って作業するときは、ドメインモデルをどのように基礎となる永続性テクノロジ(この場合はSQLクエリ)に変換するかということではなく、ドメインモデルのクエリにのみ気を付ける必要があります。

1

データベースライブラリは自然に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)
  • 。/
  • プラットフォームとSchemaManager APIはDMLを生成して実行するQueryBuilderのAPI接続
    • 照会方法:

    は、ユーザー入力のために安全ではないことへの他のすべてのAPIを考えてみましょうDDL SQL文

これらのシナリオでユーザー入力をエスケープするには、Connection#quote()メソッドを使用します。

ソース:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/security.html