2011-12-11 21 views

回答

5

簡短的回答:沒有,你不

龍答:逃逸是一個低級別的數據庫關注其中一個更高級別的ORM像學說摘要你。在使用Doctrine時,您應該只關心查詢域模型,而不關心如何將其轉換爲基礎持久性技術(在本例中爲SQL查詢)。

1

數據庫庫自然落在接觸類SQL注入安全漏洞。您應該仔細閱讀以下信息,以瞭解Doctrine如何能夠並且無法幫助您防止SQL注入。

一般來說,你應該假設在學說API不是用戶輸入的安全。然而有一些例外。

以下API被設計成從SAFE SQL注入:

  • 對於Doctrine\DBAL\Connection#insert($table, $values, $types)Doctrine\DBAL\Connection#update($table, $values, $where, $types)Doctrine\DBAL\Connection#delete($table, $where, $types)$values$where數組值。 $ values和$的表名和鍵在NOT轉義。
  • Doctrine\DBAL\Query\QueryBuilder#setFirstResult($offset)
  • Doctrine\DBAL\Query\QueryBuilder#setMaxResults($limit)
  • Doctrine\DBAL\Platforms\AbstractPlatform#modifyLimitQuery($sql, $limit, $offset)$limit$offset參數。

考慮所有其他API來爲用戶輸入不安全:

  • 連接
  • 的QueryBuilder的API
  • 平臺和SchemaManager API來生成並執行DML的查詢方法/ DDL SQL語句

要在這些情況下轉義用戶輸入,請使用Connection#quote()方法。

來源:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/security.html

相關問題