Active Record

скажите пожалуйста, защищает ли AR в Yii от sql injection? просто нигде не нашел ответ на этот вопрос.

Скажем, безопасна ли конструкция вида




public function actionView($id, $path)

        {

            $category = Tree::model()->findByPath($path);//вот это, ищем, получив данные из $_get

            $post = Post::model()->with('category')->with('comments')->findByPk($id); //может стоит хотя-бы 

//сделать $id=int($id)?

            //..


          }




да.

Смотря как реализован findByPath.

Ок. Вот реализация findbyPath




public function findByPath($path)

    {

        $domens = explode('/', trim($path, '/'));

        $model = null;


        $criteria = $this->getOwnerCriteria();


        if (count($domens)==1) {

            $criteria->mergeWith(array(

                'condition'=>'t.' . $this->aliasAttribute . '=:alias AND t.' . $this->parentAttribute . '=0',

                'params'=>array(':alias'=>$domens[0])

            ));

            $model = $this->cached($this->getOwner())->find($criteria);

			


        } else {


            $criteria->mergeWith(array(

                'condition'=>'t.' .$this->aliasAttribute . '=:alias',

                'params'=>array(':alias'=>$domens[0])

            ));

            $parent = $this->cached($this->getOwner())->find($criteria);


            if ($parent){

                $domens = array_slice($domens, 1);

                foreach ($domens as $alias){

                    $model = $parent->getChildByAlias($alias, $this->getOriginalCriteria());

                    if (!$model) return null;

                    $parent = $model;

                }

            }

        }

        return $model;

    }



Тут инъекция теоретически возможна, если вдруг aliasAttribute или parentAttribute могут прилететь от пользователя.

ок, то есть получается, что метод mergeWith ничего не экранирует?

экранирует только не поля а значение но если создать мегакод который по каким то причинам будет из гета или поста передавать значение в $this->aliasAttribute или в $this->parentAttribute то инъекция возможна так как эти параметры по идее должны задаваться статично