Yii Framework Forum: SWFUpload и CSRF Validation - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

SWFUpload и CSRF Validation как возобновить сессию после разрыва? Rate Topic: -----

#1 User is offline   SkyNet 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 21-May 09

Posted 01 November 2009 - 12:28 PM

Доброго времени суток!

в SWFUpload флеш-ролик запрашивает загружающий скрипт POSTом.
Естественно, сессия рвется.
Так как в проекте используется ajax, включена только CSFR Validation (без cookie validation)

соответсвенно, при запросе "/controller/uploadaction" возникает ошибка "The CSRF token could not be verified." до
инициализации контроллера
вопрос:
как можно восстановить сессию по какому либо ключу (phpsessionID?) до того, как идет проверка на сессию и csrf?

есть догадки, что имеет смысл хранить сессии в базе и поднимать ее по какому-нибудь $_POST['SESSION_ID']

но на каком этапе работы Yii?
0

#2 User is offline   TrojaNFlash 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 37
  • Joined: 04-September 09
  • Location:RUS

Posted 05 November 2009 - 05:00 AM

имхо проще передавать во флеху csrf ключ и вместе с пост запросом отправлть их приложению.
0

#3 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 05 November 2009 - 06:08 AM

Как по мне то проще флеху не юзать. Не понимаю зачем она вам
0

#4 User is offline   Asinak 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 30
  • Joined: 17-September 09

Posted 05 November 2009 - 08:07 AM

Зачем вставать в позу ? Человек задал вопрос конкретный, дайте ответ если есть, форум имхо не для флуда.
0

#5 User is offline   Asinak 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 30
  • Joined: 17-September 09

Posted 05 November 2009 - 08:10 AM

с SWFUpload таже проблема (потеря сесии ) и с правами по Rbac проблемы. Пришлось в Rbac через if() отключить проверку прав при переходе на екшн upload . Екшн работает только на админке так это не критично (наверно :( ).
0

#6 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 05 November 2009 - 08:44 AM

Да просто как уже сказали token надо посылать в flash через xml к примеру.
А когда форма с flash-а будет посылать результат - прибавлять к нему переменную "YII_CSRF_TOKEN" в которую и пихать token полученный через xml.
0

#7 User is offline   Albert 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 09-September 09

Posted 06 November 2009 - 01:48 AM

View PostSkyNet, on 01 November 2009 - 12:28 PM, said:

Доброго времени суток!

в SWFUpload флеш-ролик запрашивает загружающий скрипт POSTом.
Естественно, сессия рвется.
Так как в проекте используется ajax, включена только CSFR Validation (без cookie validation)

соответсвенно, при запросе "/controller/uploadaction" возникает ошибка "The CSRF token could not be verified." до
инициализации контроллера
вопрос:
как можно восстановить сессию по какому либо ключу (phpsessionID?) до того, как идет проверка на сессию и csrf?

есть догадки, что имеет смысл хранить сессии в базе и поднимать ее по какому-нибудь $_POST['SESSION_ID']

но на каком этапе работы Yii?


У меня похожая проблема была, только с uloadify. В корне всего - невозможность восстановить сессию, т.к. нету кукисов. Выход - заставить SWFUpload посылать PHPSESSID в пост-параметре (думаю SWFUpload тоже это умеет) потом добавить и сконфигурировать компонент session в конфиге main.php таким образом, чтобы сессия брала идентификатор из $_POST['PHPSESSID'], когда он есть, а не из $_COOKIE['PHPSESSID']

	// application components
	'components'=>array(
                'session'=>array(
			'class'=>'CHttpSession',
			'useTransparentSessionID'   =>($_POST['PHPSESSID']) ? true : false,
                        'cookieMode'                =>($_POST['PHPSESSID']) ? 'none' : 'allow',
                ),

4

#8 User is offline   SkyNet 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 21-May 09

Posted 18 November 2009 - 02:49 PM

View PostAlbert, on 06 November 2009 - 01:48 AM, said:

У меня похожая проблема была, только с uloadify. В корне всего - невозможность восстановить сессию, т.к. нету кукисов. Выход - заставить SWFUpload посылать PHPSESSID в пост-параметре (думаю SWFUpload тоже это умеет) потом добавить и сконфигурировать компонент session в конфиге main.php таким образом, чтобы сессия брала идентификатор из $_POST['PHPSESSID'], когда он есть, а не из $_COOKIE['PHPSESSID']

	// application components
	'components'=>array(
                'session'=>array(
			'class'=>'CHttpSession',
			'useTransparentSessionID'   =>($_POST['PHPSESSID']) ? true : false,
                        'cookieMode'                =>($_POST['PHPSESSID']) ? 'none' : 'allow',
                ),




светлая голова !
0

#9 User is offline   yolf 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 18-June 10

Posted 10 August 2010 - 04:52 AM

View PostAlbert, on 06 November 2009 - 01:48 AM, said:

У меня похожая проблема была, только с uloadify. В корне всего - невозможность восстановить сессию, т.к. нету кукисов. Выход - заставить SWFUpload посылать PHPSESSID в пост-параметре (думаю SWFUpload тоже это умеет) потом добавить и сконфигурировать компонент session в конфиге main.php таким образом, чтобы сессия брала идентификатор из $_POST['PHPSESSID'], когда он есть, а не из $_COOKIE['PHPSESSID']

	// application components
	'components'=>array(
                'session'=>array(
			'class'=>'CHttpSession',
			'useTransparentSessionID'   =>($_POST['PHPSESSID']) ? true : false,
                        'cookieMode'                =>($_POST['PHPSESSID']) ? 'none' : 'allow',
                ),



Аналогичная проблема, но ваш подход решил только часть проблемы - передачу id сессии, но не CSRF.
Пришлось в виджете дописывать:
$this->settings['scriptData'] = array(
        'PHPSESSID' => Yii::app()->session->getSessionId(),
        'YII_CSRF_TOKEN' => Yii::app()->request->csrfToken,
);


и в index.php:
if(isset($_POST['YII_CSRF_TOKEN']) && !empty($_POST['YII_CSRF_TOKEN']))
{
    $_COOKIE['YII_CSRF_TOKEN'] = $_POST['YII_CSRF_TOKEN'];
}

1

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users