XSS safe model content

4 0
1
Viewed: 15 248 times
Version: 1.1
Category: Tutorials
    Written by: phiras phiras
    Updated by: phiras phiras
    Created: Feb 25, 2010
    Updated: 16 years ago

    In this post I am going to describe a solution to make your yii-based web application safe from illegal content injections.

    I am going to make a use of the the yii wrapped htmlpurifier class inside a behavior. this behavior could be attached to any model with declaring the attributes we would like to make them XSS safe.

    I have wrote the following behavior :

    class CSafeContentBehavior extends CActiveRecordBehavior
    {
    	public $attributes =array();
    	protected $purifier;
    	
    	function __construct(){
    		$this->purifier = new CHtmlPurifier;
    	}
    	
        public function beforeSave($event)
        {
    		foreach($this->attributes as $attribute){
    			$this->getOwner()->{$attribute} = $this->purifier->purify($this->getOwner()->{$attribute});
    		}
        }
    }
    

    place this class in a file in your application directory, for example : application/behaviors/CSafeContentBehavior.php Now in your model you attach the behavior like this :

    class Post extends CActiveRecord
    {
    
    public function behaviors(){
    	return array(
    		'CSafeContentBehavor' => array( 
    			'class' => 'application.behaviors.CSafeContentBehavior',
    			'attributes' => array('title', 'body'),
    		),
    	);
    }
    

    Here we go. Our Post model will now purify title and body columns before each save operation.