Zend - 插入/更新时我需要使用quote()吗?

时间:2010-10-13 23:38:01

标签: mysql security zend-framework sql-injection

我正在开发一个允许用户输入mySQL中VARCHAR(255)字段的应用程序,因此安全性是一个主要问题。

我无法理解quote()。如果我使用quote('test'),数据在SELECT上返回'\'test \'',这是不可取的。如何取消引用此数据?

如果我绕过quote(),我可以查看phpmyadmin并看到'test',所以Zend似乎并没有自动为我提供引号......

我的代码看起来像这样:

    public function getDbTable() {
        if (null === $this->_dbTable) {
           $this->setDbTable(new Zend_Db_Table($this->_tableName));
        }
        return $this->_dbTable;
    }

    private function insert($anObject) {
        $row['cell1'] = $anObject->getCell1();
        $row['cell2'] = $anObject->getCell2();

         $this->getDbTable()->insert($row);
    }

插入和更新时,我应该在$ anObject-> getCell1()等周围使用quote()吗?

2 个答案:

答案 0 :(得分:5)

不,Zend为你做到了。

  

如果我绕过quote(),我可以查看phpmyadmin并看到'test',所以Zend似乎并没有自动引用我...

呵呵,如果你在PMA中看到'test'(带引号),那就意味着Zend成功引用了你的字符串。如果Zend没有引用()它 - 你会看到关于错误查询的例外。 ; - )

答案 1 :(得分:0)

Zend_Db_Table_Abstract :: insert使用Zend_Db_Adapter_Abstract :: insert来执行插入。 Zend_Db使用prepared statement,因此使用insert方法时不存在SQL注入的风险。在将值传递给insert之前,您不必引用它们。

相关问题