2010-01-30 11 views
8

he leído desde el libro de cocina (seg. 4,2)Al hacer la desinfección en CakePHP

CakePHP te protege contra la inyección de SQL si utiliza métodos ORM de CakePHP (como find() y save()) y la notación de matriz adecuada (es decir, array ('campo' => $ valor)) en lugar de SQL sin procesar. Para desinfectarse contra XSS, generalmente es mejor guardar HTML sin formato en la base de datos sin modificaciones y desinfectar en el momento de la salida/visualización.

¿Estamos seguros de que NUNCA necesitamos desinfectar manualmente los datos del usuario contra SQL, siempre que restrinjamos a métodos como find() y save()? Especialmente, ¿es esto cierto si tomo mis datos de $ _POST directamente en lugar de $ this-> data? En otras palabras, supongamos que realizo una consulta find() usando $ this-> data. Entonces, CakePHP desinfecta contra SQL cuando escribe la matriz $ this-> data o cuando escribe la consulta para find()?

Mi segunda pregunta es para desinfectar los datos que se mostrarán. ¿Es Sanitize :: html idempotent? Entonces, ¿puedo usarlo en mi método beforeSave(), o se romperá la segunda vez que guardo porque se aplica nuevamente y da un nuevo resultado?

Respuesta

6

Sobre esta cuestión:

CakePHP desinfecte en SQL al escribir la matriz $ this-> data o al escribir la consulta para find()?

Cakephp no desinfectar $ this-> data en el controlador, si marca el código de la torta, en Dispatcher :: parseParams() http://api13.cakephp.org/view_source/dispatcher/#line-244 verá que cuando $ _POST se copia al controlador de datos los valores no son desinfectado

Sin embargo, el uso de $ _POST no es recomendable, ya que se perderá toda la magia de la torta que se gana cuando se utiliza el asistente de formulario

0

Woah - Si toma los datos directamente de $ _POST que , debe desinfectar los datos si planea publicar los datos en las páginas siguientes. Recuerdo hace 2 años un gran susto porque se reveló que la simple inyección de SQL permitiría explotar los sitios Cake 1.1 debido a la disposición de las consultas de selección utilizadas para iniciar sesión.

Sin embargo, muchos usuarios utilizan intencionadamente la vieja regla de los campos de entrada que se utilizaría en SQL:.

"Para proteger contra la inyección de SQL, la entrada del usuario no debe ser directamente incrustado en sentencias SQL En cambio, la entrada del usuario debe ser escapó ..... "

ASÍ, sí, eso fue un problema aparte, pero la misma idea, aunque CakePHP es el jefe, y lo es mucho para nosotros, nunca deberíamos confiar en su seguridad ciega. El impacto en el rendimiento de los datos de depuración es casi nulo. Así que hazlo.

+0

Ok, lo estoy haciendo, pero sólo para entender. Supongamos que hago una consulta find() usando $ this-> data. Entonces, CakePHP desinfecta contra SQL cuando escribe la matriz $ this-> data o cuando escribe la consulta para $ this-> find()? En el segundo caso, la desinfección todavía parece superflua incluso si uso $ _POST – Andrea

+0

Por cierto, estoy desinfectando los datos que se mostrarán. Estoy pidiendo datos para ser utilizados en consultas SQL. – Andrea

0

No, no lo afectará. Puede usarlo en before_save(). Necesitará higienización si utiliza cualquiera de las funciones función de consulta personalizada es decir, donde se puede utilizar su propia consulta

Cuestiones relacionadas