1

是否有 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 上是否有一种方法可以清理该 var,除了用于清理的经典 php 函数。

4

3 回答 3

2

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

换句话说,从文档中,

$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
于 2013-04-24T12:53:15.887 回答
1

您至少应该将参数与 DBAL 一起使用(因为这就是您正在使用的):

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

或者您的代码对 SQL 注入开放。

于 2013-04-24T14:45:29.883 回答
0

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

于 2013-04-24T13:18:42.087 回答