Yii 1.1.8 и выключение CSRF

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Здравствуйте, прикручиваю Вебмани к сайту, возникла проблема с Result URL. Если включен CSRF, то соответственно мерчант выдает ошибку, так как не передается токен. Погуглил, нашел расширение класса CHttpRequest:

Код: Выделить всё


class HttpRequest extends CHttpRequest {
    public $noCsrfValidationRoutes = array();

    protected function normalizeRequest(){
        parent::normalizeRequest();
        
        if($_SERVER['REQUEST_METHOD'] != 'POST') return;

        $route = Yii::app()->getUrlManager()->parseUrl($this);
        if($this->enableCsrfValidation){
            foreach($this->noCsrfValidationRoutes as $cr){
                if(preg_match('#'.$cr.'#', $route)){
                    Yii::app()->detachEventHandler('onBeginRequest',
                        array($this,'validateCsrfToken'));
                    Yii::trace('Route "'.$route.' passed without CSRF validation');
                    break; // found first route and break
                }
            }
        }
    }

}
 
Подключил его как положено в конфиге, но сайт не работает и приложение выдает ошибку:

Код: Выделить всё

Fatal error: Call to undefined method HttpRequest::init() in /var/www/site/data/www/site.ru/_yii/base/CModule.php on line 372
Как решить проблемку не подскажите?
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Забыл добавить, что с Yii 1.1.7 работает нормально
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение rak »

что в конфиге?
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Тестировал много вариантов.

1.

Код: Выделить всё

'request'=>array(
        'class'=>'HttpRequest',
            'enableCsrfValidation'=>true,
            'enableCookieValidation'=>true,
            'noCsrfValidationRoutes'=>array(
                'finance/result'
            ),
            
), 
2.

Код: Выделить всё

'request'=>array(
        'class'=>'HttpRequest',
            'enableCsrfValidation'=>true,
            'enableCookieValidation'=>true,
            'noCsrfValidationRoutes'=>array(
                '^finance/result.*$',
         ),
            
), 
Также добавлю, что на денвере работает нормально.

На сервере у меня 2 проекта, один с 1.1.8 и этот скрипт не работает, а другой с 1.1.7 работает нормально. При обновлении второго сайта с 1.1.7 на 1.1.8 - также перестает работать.

Сервер PHP 5.3.6, apache 2+, nginx 1.0.5
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение rak »

Где лежит HttpRequest, может стоит прописать полный путь к нему?
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Лежит в компонентах, которые подгружаются в импорте, сомневаюсь, что проблема в этом.
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Сорри за даблпост, но неужели никто не делал какой-то проект на 1.1.8 с вебмани?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение rak »

ну не знаю, у меня такие же настройки, 1.1.8 и все работает
Тут дебажить нужно
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Можешь скинуть свой класс и конфиг (ну ессно без важной инфы)? Я по твоему примеру еще раз переделаю все.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение rak »

Код: Выделить всё

class HttpRequest extends CHttpRequest {
    public $noCsrfValidationRoutes = array();

    protected function normalizeRequest(){
        parent::normalizeRequest();

        $route = Yii::app()->getUrlManager()->parseUrl($this);
        if($this->enableCsrfValidation){
            foreach($this->noCsrfValidationRoutes as $cr){
                if(preg_match('#'.$cr.'#', $route)){
                    Yii::app()->detachEventHandler('onBeginRequest',
                        array($this,'validateCsrfToken'));
                    Yii::trace('Route "'.$route.' passed without CSRF validation');
                    break; // found first route and break
                }
            }
        }
    }

}
 

Код: Выделить всё

'request' => array(
            'class' => 'HttpRequest',
            'noCsrfValidationRoutes' => array(
                '^payment/paypal/ipn$',
                '^payment/paypal/return$',            
            ),
            'enableCsrfValidation' => true,         
        ),
 
Собственно тоже самое.
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Скопировал твое, результата ноль. Что за бред не понимаю, в движке ничего не менял, свежий заливаю тоже самое.
В любом случае спасибо за код.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение rak »

выложи файл CHttpRequest.php и HttpRequest.php
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Код: Выделить всё

<?php
    class HttpRequest extends CHttpRequest {
        public $noCsrfValidationRoutes = array();

        protected function normalizeRequest(){
            parent::normalizeRequest();

            $route = Yii::app()->getUrlManager()->parseUrl($this);
            if($this->enableCsrfValidation){
                foreach($this->noCsrfValidationRoutes as $cr){
                    if(preg_match('#'.$cr.'#', $route)){
                        Yii::app()->detachEventHandler('onBeginRequest',
                            array($this,'validateCsrfToken'));
                        Yii::trace('Route "'.$route.' passed without CSRF validation');
                        break; // found first route and break
                    }
                }
            }
        }

    }
     
?>
Другой файл в архиве
Вложения
CHttpRequest.zip
(8.35 КБ) 131 скачивание
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Yii 1.1.8 и выключение CSRF

Сообщение esche »

Лежит в компонентах, которые подгружаются в импорте, сомневаюсь, что проблема в этом.
Легко проверить - die('i m here'); (или менее радикально.. )

Попробуйте функцию init() в своём классе продублировать..

Код: Выделить всё

//HttpRequest
        public function init()
        {
                parent::init();
                $this->normalizeRequest();
        } 
...
g-man
Сообщения: 10
Зарегистрирован: 2011.09.06, 15:34

Re: Yii 1.1.8 и выключение CSRF

Сообщение g-man »

Добавил метод, но ошибка все равно вываливается эта же:

Код: Выделить всё

    Fatal error: Call to undefined method HttpRequest::init() in /var/www/site/data/www/site.ru/_yii/base/CModule.php on line 372
lehandr
Сообщения: 12
Зарегистрирован: 2011.05.25, 21:51

Re: Yii 1.1.8 и выключение CSRF

Сообщение lehandr »

Имею ту же проблему. На денвере, дома, все работает. Удаленно вижу ту же ошибку. Пока не вижу решения.
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение Elfer »

Аналогично. Имею ту же проблему. Причём почти год сайт работал нормально, а вот сегодня та же самая ошибка. Версия Yii 1.1.12. На локали стоит Денвер и всё гуд. Предполагаю, что обновилась версия PHP на сервере PHP 5.3.27. Сейчас специально уточню у хостеров.
Люди кто и как решил проблему, есть такие? Не хочется лезть в ядро и комментить строчку, вызывающую ошибку.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение Elfer »

Вообщем хостеры ответили: "Был обновлен только модуль php eaccelerator и ioncube loader."
Именно после этого у меня стала выбиваться ошибка:

Код: Выделить всё

Fatal error: Call to undefined method HttpRequest::init() in /home/user4313/www/istguide.com/yii/framework/base/CModule.php on line 388
Чтобы избавиться от этой проблемы пришлось закомментировать следующий код в конфиге:

Код: Выделить всё

'request'=>array(
    'class'=>'HttpRequest',
    'enableCsrfValidation'=>true,
    'enableCookieValidation'=>true,
    'noCsrfValidationRoutes'=>array(
        '^pay/result$',
        '^admin/guide/(set|get)date',
    ),
),
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
puritania
Сообщения: 43
Зарегистрирован: 2012.04.18, 06:26
Откуда: Челябинск
Контактная информация:

Re: Yii 1.1.8 и выключение CSRF

Сообщение puritania »

При переносе на очередной хостинг также столкнулся с такой проблемой - все решилось благодаря вот этому комменту: https://github.com/yiisoft/yii/issues/3 ... t-29016389 переименовываем класс и все работает
Ответить