當使用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?
簡短的回答:沒有,你不。
龍答:逃逸是一個低級別的數據庫關注其中一個更高級別的ORM像學說摘要你。在使用Doctrine時,您應該只關心查詢域模型,而不關心如何將其轉換爲基礎持久性技術(在本例中爲SQL查詢)。
數據庫庫自然落在接觸類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來爲用戶輸入不安全:
要在這些情況下轉義用戶輸入,請使用Connection#quote()
方法。
來源:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/security.html