数据库输入卫生

时间:2012-04-27 09:17:00

标签: mysql sql database sanitization

很抱歉,如果这个问题得到了一定程度的回答,但我看到的答案似乎都在改变......

我真的不是100%确定如何处理来自数据库的数据。

例如:一个UTF8 mysql数据库和一个用户输入的表单。

在处理帖子时 - 我应该htmlspecialchars('data',ENT_QUOTES)将数据保存到数据库之前,还是只保存原始数据......数据很可能包含特殊字符的umlouts等。因此,如果没有进行清理,我会假设<>,并且所有类型的报价都将完全按原样存储。

在保存之前,我还需要addslashesmysql_real_escape_string

OR应该在输出上完成所有这些操作,只使用过滤输入,我使用zend所以我在大多数元素中添加了过滤器。

不确定相关的magic_quotes但是已关闭。

编辑2

我相信我的查询使用预准备语句->where('fqha.form_question_has_answer_form_id = ?', $result[$input->formpage]['form_id'])

这是否意味着我可以忽略对数据的任何进一步操作,只保存post vars包含的内容。只担心清理输出到页面?

修改

我正在使用学说1.2并且我可以告诉他这是pdo ..但对于这个以及上述问题,任何建议都将不胜感激

protected function _initDoctrine()
    {
        require_once 'Doctrine/Doctrine.php';
        require_once 'Doctrine/Overloadable.php';
        require_once 'Doctrine/Connection/Profiler.php';

        $this->getApplication()  
             ->getAutoloader()   
             ->pushAutoloader(array('Doctrine', 'autoload'), 'Doctrine');

        $manager = Doctrine_Manager::getInstance();
        $manager->setAttribute(  
            Doctrine::ATTR_MODEL_LOADING,   
            Doctrine::MODEL_LOADING_CONSERVATIVE
        );

        $cacheDriver = new Doctrine_Cache_Apc();

        $config = $this->getOption('doctrine'); 
        $conn = Doctrine_Manager::connection('mysql://user:pass@localhost/db_name', 'doctrine'); 
        $conn->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, $cacheDriver);
        $conn->setCharset('utf8');
        $conn->exec('SET NAMES utf8');

        $profiler = new Imind_Profiler_Doctrine_Firebug();
        $conn->setListener($profiler);

        return $conn;
    }

0 个答案:

没有答案