2011-09-12 32 views
2

我很困惑当框架自动引用和它不变时quote变量。例如,据我所知,它不会在where子句中引用(除非您使用额外的参数?)。Zend db - 何时应该引用以避免sql注入?

是否有引导/作弊表单,当我们必须在基本CRUD操作中手动操作quote

谢谢。

回答

4

对于我来说,基本的“经验法则”是如下:

  • 如果您需要将值插入到字符串中,例如:"SELECT * from TABLE WHERE value=$value"您必须先引用它。
  • 如果您使用的是占位符,例如$select->where('value = ?', $value');,或一组值如array('value' => $value),该框架将引用您的价值。

希望它能帮助,

+0

小过于简单,但良好。你应该引用 1)任何用户输入 2)任何可能包含SQL代码的东西 –

+0

+1:对我来说,通配符总是“order by”子句,有时来自用户输入。也许你可以增加解决这个问题的答案。 –

2

永远不要自己构建查询字符串,总是让Zend_Db为你做。即,不要自行建造的字符串指定的where子句(等):

$where = 'id = ' . $_REQUEST['id'] . ' and thing = ' . $_REQUEST['thing']; 
$select->where($where); 

而是做到这一点:

$select 
    ->where('id = ?', $_REQUEST['id']) 
    ->where('thing = ?', $_REQUEST['thing']); 
相关问题