Qual é a melhor maneira de usar mysql_real_escape_string e htmlspecialchars ao salvar dados no CakePHP?

StackOverflow https://stackoverflow.com/questions/956761

Pergunta

Eu estou usando FCKEditor com CakePHP e quando eu salvar os dados enviados a partir do editor, eu quero correr os htmlspecialchars () e mysql_real_escape_string () funções nos dados para limpá-lo antes de armazená-lo em meu banco de dados. O problema é que eu não sou realmente certo onde fazer isso dentro do framework CakePHP. Tentei no controlador como este:

function add() 
{
   if (!empty($this->data)) 
   {
      if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
      {
         $this->Session->setFlash('Your article has been saved.');
     $this->redirect(array('action' => 'index'));
      }

   }
}

No entanto $ this-> dados é uma matriz e essas funções esperam cordas de modo que não vai funcionar. Eu faço isso na matriz de validação do modelo? Eu não faço ideia. Além disso, deixe-me saber se correr htmlspecialchars () dentro de mysql_real_escape_string () não é uma boa prática.

Foi útil?

Solução

Não use htmlspecialchars() quando você Salvar de dados, usá-lo quando você saída dados para HTML. E se você precisa de olhar para os dados em algum contexto diferente do HTML?

Também eu não sou um usuário do bolo, mas eu ficaria surpreso se você precisa aplicar mysql_real_escape_string() como você salvar dados de qualquer um. A camada de acesso a banco de dados deve protegê-lo contra injeção de SQL, e ao fazê-lo manualmente você vai acabar armazenando cadeias duplamente escaparam.

Outras dicas

A resposta curta e simples é - se o acesso ao banco foi abstraída, não há necessidade de você chamar essas funções em tudo.

O único lugar onde eles são necessários é se você construir SQL real a partir de pedaços de cordas. Que você não deve fazer de qualquer maneira, mas isso é outra história.

A linha inferior é -. A estrutura vai fazer a coisa certa, não interferem

EDIT:. Como Bill Karwin assinala - htmlspecialchars() é do departamento completamente errado aqui

Se você está construindo suas próprias cordas SQL com CakePHP, então CakePHP fornece a função de escape:

escape(string $string, string $connection)

http://book.cakephp.org/view/1186/escape

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top