Propel / Symfony 1.4:安全地将自定义 sql 子查询与条件结合起来
Propel / Symfony 1.4: combine securely custom sql subquery with criteria
我想将自定义 sql 子查询插入到通用的 Propel 条件中。子查询包含用户输入,因此必须对这些输入进行转义。我怎样才能意识到这一点?
我有这样的东西(简单):
$c = new Criteria();
$c->add(myTablePeer::CUSTOMER_ID, 123);
$c->add... //several other criterions, joins etc.
$subQuery = "(SELECT SUM(id) FROM my_other_table WHERE customer_id = 123) > '[USERINPUT]'";
$c->add("", $subQuery, Criteria::CUSTOM);
因此,这个子查询当然容易受到 SQL 注入的攻击。我怎样才能以最好的方式保护这个查询?我不能使用 mysqli_real_escape_string(),可以吗?所以只需添加斜线()就可以了?
哈利路亚,我想我找到了解决方案:
Propel::getConnection()->quote($userInput)
这很神奇。引用转义一步到位!
所以子查询将是:
$subQuery = "(SELECT SUM(id) FROM my_other_table WHERE customer_id = 123) > ".Propel::getConnection()->quote($userInput);
有人可以验证这是保护输入的最佳方式吗?
我想将自定义 sql 子查询插入到通用的 Propel 条件中。子查询包含用户输入,因此必须对这些输入进行转义。我怎样才能意识到这一点?
我有这样的东西(简单):
$c = new Criteria();
$c->add(myTablePeer::CUSTOMER_ID, 123);
$c->add... //several other criterions, joins etc.
$subQuery = "(SELECT SUM(id) FROM my_other_table WHERE customer_id = 123) > '[USERINPUT]'";
$c->add("", $subQuery, Criteria::CUSTOM);
因此,这个子查询当然容易受到 SQL 注入的攻击。我怎样才能以最好的方式保护这个查询?我不能使用 mysqli_real_escape_string(),可以吗?所以只需添加斜线()就可以了?
哈利路亚,我想我找到了解决方案:
Propel::getConnection()->quote($userInput)
这很神奇。引用转义一步到位! 所以子查询将是:
$subQuery = "(SELECT SUM(id) FROM my_other_table WHERE customer_id = 123) > ".Propel::getConnection()->quote($userInput);
有人可以验证这是保护输入的最佳方式吗?