使用Doctrine2的
EntityRepository::findBy()
时,我还需要转义我传入的值吗?
$em->getRepository('User')->findBy(array('name' => $_POST['name']));
^ need to escape?
数据库自然会涉及到 SQL 注入安全漏洞一类。您应该仔细阅读以下信息,以了解 Doctrine 如何帮助您防止 SQL 注入,以及如何不能帮助您防止 SQL 注入。
一般来说,您应该假设 Doctrine 中的 API 对于用户输入来说是不安全的。不过也有一些例外。
以下 API 旨在安全地防止 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 和 $where 的表名和键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