[SOLUCIONADO]:Como no permitir código malicioso?

Hola, lo que sucede es que en una de mis aplicaciones un usuario pudo introducir en un campo de texto código javascript que fue almacenado en la BD y cuando se muestra el dato entonces el código es ejecutado, yo por ejemplo puedo evitar que se ejecute utilizando la función CHtml::encode() pero lo que quiero realmente es que no se pueda almacenar ese código javascript, alguien tiene una idea de como hacer esto?

Muchas gracias!

Como paso eso?

Si estas usando AR, esté ya toma las precauciones necesarias!

Como lo estas usando?

Probaste usar la extensión SafeHtml???

http://www.yiiframework.com/doc/guide/topics.security#cross-site-scripting-prevention

Saludos,

Hola Poll, lo que pasa es que metieron código javascript, usando AR lo que puedo evitar es que metan código SQL segun tengo entendido.

Hola Sebas, gracias por la información, pero tengo una pregunta… lo que pasa es que con esta solución tengo que hacer cambios en todas las partes donde imprimo datos, pero hay forma de tener alguna solución parecida en el momento de guardar?, es decir, poder purificar el contenido de una variable pero antes de almacenarla en la BD… es posible?

Se puede usar un filter validator y una funcion que filtra.

Para esto en rules se pone

array(‘campos’, ‘filter’, ‘filter’=>array($this,‘purifyHtml’)),

y crear una función en el modelo por ejemplo

public function purifyHtml($value) {

$purify = new CHtmlPurifier();

return $purify->purify($value);

}

Eso deberia andar para el guadar.

Genial ngleich, muchas gracias… funcionó!

Solo como por aprender más… a alguien se le ocurre alguna otra idea para hacer este tipo de validaciones?

Si, podés hacerlo utilizando un behavior dentro de tu modelo. En el behavior creas la función beforeSave y ahí lo modificás.

Saludos,

Ok, muchas gracias :)