ورود

View Full Version : disable کردن csrf در بعضی از action ها



engmmrj
شنبه 10 خرداد 1393, 10:51 صبح
شاید در بعضی پروژها که مثلا می خواهید با بانک کار کنید وقتی csrf روشن هست به مشکل خورده باشید ، با راه حل زیر می توانید csrf را در بعضی action ها خاموش کنید.
ایجاد یک کامپونتت به نام HttpRequest.php

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

protected function normalizeRequest()
{
//attach event handlers for CSRFin the parent
parent::normalizeRequest();
//remove the event handler CSRF if this is a route we want skipped
if($this->enableCsrfValidation)
{
$url=Yii::app()->getUrlManager()->parseUrl($this);
foreach($this->noCsrfValidationRoutes as $route)
{
if(strpos($url,$route)===0)
Yii::app()->detachEventHandler('onBeginRequest',array($this,'v alidateCsrfToken'));
}
}
}
}
کانفیگ کامپونت request را به صورت زیر تغییر دهید

// application components
'components'=>array(
....

'request' => array(
'enableCsrfValidation' => true,
'class'=>'HttpRequest',
'noCsrfValidationRoutes'=>array(
'controllername/actionname',
),
),
)


هر action که در noCsrfValidationRoutes وارد کنید در اون اکشن token csrf چک نمیشه .

mah.tab
شنبه 10 خرداد 1393, 11:42 صبح
مرسی به خاطر مطلب مفیدتون, میشه یکم بیشتر توضیح بدین راجع به امتیاز ها و مشکلاتی که میتونه به وجود بیاره لطفآ

rezaonline.net
شنبه 10 خرداد 1393, 14:57 عصر
بعد از پرداخت از بانکها ، کد پیگیری و ... غالبا بصورت POST برگشت داده میشه به کال بک ، فریم ورک هم پیشفرض هر وقت درخواستی بصورت POST بیاد باید فیلد CSRF رو چک کنه که بانک چنین پارامتری رو نمیفرسته چون رسما از یه جای خارجی درخواست پست میشه به سایت و نه در خود سایت .
پس باعث خطای CSRF میشه .