什么时候我应该引用以避免sql注入


Zend db - When should I quote to avoid sql injection?

我对框架何时自动引用以及何时不引用quote变量感到困惑。例如,据我所知,它不会引用where子句(除非您使用额外的参数?)。

是否有一个指南/备忘单,当我们必须手动quote在基本的CRUD操作?

谢谢。

对我来说,基本的"经验法则"如下:

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

希望有帮助,

永远不要自己构建查询字符串,总是让Zend_Db为你做。也就是说,不要通过自己构建字符串来指定where子句(以及类似的):

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

应该这样做:

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