PDA

View Full Version : csrf validation و درگاه جهان پی - yii2



desatir7316
دوشنبه 02 آذر 1394, 23:49 عصر
سلام دوستان
درگاه جهان پی رو روی سایتم فعال کردم، ولی هنگام برگشت csrf رو خطا میده و تایید نمی کنه. تراکنش انجام می شه ولی توس سایت خودم و توی پنل جهان پی ثبت نمی شه چون callback صدا زده نمی شه
اومدم توی beforeAction بگم اگه متد verify صدا زده شد، csrf رو غیر فعال کن، ولی دیدم parent::beforeAction هم false بر می گردونه
حالا موقتا اون عملیات وصل شدن به درگاه و تایید بعد از درگاه رو توی یه کنترلر دیگه که کلا csrf روش غیر فعال هست گذاشتم و داره کار می کنه
خواستم ببینم کار اشتباهیه و اینکه مشکل csrf ام کلا چی هست؟

ممنون می شم راهنمایی کنید.

مهرداد سیف زاده
سه شنبه 03 آذر 1394, 08:20 صبح
متد verify رو غیر فعال کردید با چه روشی؟
البته کار شما هم فرقی نمیکنه. csrf در زمانی کاربرد داره که فرم از توی سایت شما و کاربر بخواد submit کنه. ولی وقتی داده ها قراره از سایت دیگری callback بشه دیگه مکانیزم csrf نمیتونه اجرا بشه.
روشهای زیر رو تست کنید:

۱.در ابتدای کدهای actin کد زیر رو قرار بدید

Yii::$app->controller->enableCsrfValidation = false;

۲. costume کردن beforAction


public function beforeAction($action)
{
if ($action->id == 'my-method') {
Yii::$app->controller->enableCsrfValidation = false;
}


return parent::beforeAction($action);
}

desatir7316
سه شنبه 03 آذر 1394, 10:20 صبح
verify که برای تایید پرداخته!
csrf رو غیر فعال کردم ولی کلا عملیات بانکی رو بردم توی یه کنترلر دیگه
توی parent::beforeaction($action) مقدار false برگردونده می شه، چرا؟

مهرداد سیف زاده
سه شنبه 03 آذر 1394, 10:55 صبح
verify که برای تایید پرداخته!
csrf رو غیر فعال کردم ولی کلا عملیات بانکی رو بردم توی یه کنترلر دیگه
توی parent::beforeaction($action) مقدار false برگردونده می شه، چرا؟

منظورم vertify در csrf هست. قبل از لود شدن صفحه برای csrf توکن ساخته میشه و در session قرار میگیره و در فرم یک مقدار hidden هست که بعد از submit شدن مقدار hidden درون فرم با session مقایسه میشه.
بله در beforAction هم false برمیگردونه. و شما با تابعی که بهتون دادم باید force کنید و بگید اگر در این کنترلر و در این اکشن بود اون وقت از تایید csrf صرف نظر کن.