¿Cuál es la mejor manera de utilizar mysql_real_escape_string y htmlspecialchars al guardar los datos en CakePHP?

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

Pregunta

Estoy utilizando FCKEditor con CakePHP y al guardar los datos enviados desde el editor Quiero correr los htmlspecialchars () y mysql_real_escape_string () funciones de los datos para limpiarlo antes de almacenarlo en mi base de datos. El problema es que no estoy realmente seguro de dónde hacer esto en el marco de CakePHP. Probé en el controlador de la siguiente manera:

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'));
      }

   }
}

Sin embargo $ this-> data es una matriz y las funciones de esperar cuerdas de manera que no va a funcionar. ¿Lo hago en la matriz de validación del modelo? No tengo idea. También, que me haga saber si se está ejecutando htmlspecialchars () dentro de mysql_real_escape_string () no es una buena práctica.

¿Fue útil?

Solución

No utilice htmlspecialchars() cuando Guardar de datos, usarlo cuando salida de datos a HTML. ¿Qué pasa si usted necesita buscar los datos en un contexto que no sean HTML?

Además, no soy un usuario de la torta, pero me sorprendería si es necesario aplicar mysql_real_escape_string() como guarde los datos tampoco. La capa de acceso a base de datos que debe proteger contra la inyección de SQL, y al hacerlo manualmente usted va a terminar el almacenamiento de cadenas escapado doblemente.

Otros consejos

La respuesta corta y simple es - si el acceso a la base de datos se ha abstraído de distancia, no hay necesidad de llamar a estas funciones en absoluto.

El único lugar donde se necesitan es si se genera SQL real a partir de trozos de cuerdas. ¿Qué no se debe hacer de todos modos, pero eso es otra historia.

El fondo es - el marco va a hacer lo correcto, no interfieren

.

EDIT:. Como Bill Karwin señala - htmlspecialchars() es del departamento completamente mal aquí

Si usted está construyendo sus propias cadenas SQL con CakePHP, a continuación, CakePHP proporciona la función de escape:

escape(string $string, string $connection)

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top