在Symfony2中清除SQL用户变量

时间:2013-04-24 12:40:02

标签: php symfony

是否有Symfony2功能来清理用户输入?

到目前为止,这是我的代码;

    $action_id = $this->getRequest( )->query->get('actionid');

    $conn = $this->get('database_connection');
    $query   = $conn->fetchAll('SELECT * FROM api_codes WHERE `action_id` = "' . $action_id . '" LIMIT 1');

从表单获取action_id,以便用户输入。我想知道symfony2上是否有一个方法来清除除了用于清理的clasic php函数之外的var。

3 个答案:

答案 0 :(得分:2)

我不认为Symfony在控制器级别提供任何特定的帮助器/方法来清理用户输入。但是,Doctrine附带sanitization用于数据库(SQL)注入。

换句话说,来自documentation

$stmt = $conn->prepare('SELECT * FROM api_codes WHERE `action_id` = :action_id LIMIT 1');
$stmt->bindValue("action_id", $action_id); // Which would prevent SQL Injection
$stmt->fetchAll(); // Which could also be done in a one line refactoring

答案 1 :(得分:1)

您至少应该使用DBAL参数(因为这就是您所使用的):

$conn->fetchAll(
  'SELECT * FROM api_codes WHERE `action_id` = :id LIMIT 1',
   array("id"=>$action_id)
);

或您的代码打开SQL注入。

答案 2 :(得分:0)

如果您谈论SQL转义,您可以在当前示例中使用$conn->quote($input);。您也可以使用像Ahmed建议的准备好的陈述。