PDA

View Full Version : فعال کردن csrf



kazemimorteza
یک شنبه 20 مهر 1393, 16:11 عصر
csrf را فعال میکنم


'enableCsrfValidation' => true,


بعد که درخواست میره درگاه بانک ملت بر میگرده میگه خطای ۴۰۰


CSRF token قابل تایید نمی باشد

لطفا راهنمایی کنید.:گریه::گریه:

engmmrj
یک شنبه 20 مهر 1393, 21:00 عصر
باید تو اکشنی که میخوای به بانک درخواست بدی csrf رو خاموش کنی.
آموزش خاموش کردن csrf در بعضی از action ها (http://engmmrj.ir/site/4)

kazemimorteza
دوشنبه 21 مهر 1393, 22:29 عصر
در yii1
project/protected/components/HttpRequest.php
یک اسکریپت به اسم HttpRequest.php ایجاد کن


<?php
class HttpRequest extends CHttpRequest {

public $noCsrfValidationRoutes = array();

/**
* Normalizes the request data.
* This method strips off slashes in request data if get_magic_quotes_gpc() returns true.
* It also performs CSRF validation if {@link enableCsrfValidation} is true.
*/
protected function normalizeRequest()
{
parent::normalizeRequest();
if ($this->getIsPostRequest() && $this->enableCsrfValidation && !$this->checkCurrentRoute())
Yii::app()->detachEventHandler('onbeginRequest', array($this, 'validateCsrfToken'));
}

/**
* Checks if current route should be validated by validateCsrfToken()
* @return boolean true if current route should be validated
*/
private function checkCurrentRoute() {
foreach ($this->noCsrfValidationRoutes as $checkPath)
{
if (($pos = strpos($checkPath, "*")) !== false)
{
$checkPath = substr($checkPath, 0, $pos - 1);
if (strpos($this->pathInfo, $checkPath) == 0)
return false;
} elseif ($this->pathInfo === $checkPath)
return false;
}
return true;
}
}



protected/config/main.php


'components' => array(
'request' => array(
'enableCsrfValidation' => true,
'class' => 'application.components.HttpRequest',
'noCsrfValidationRoutes'=>array(
'site/GetPayLine',
),
'enableCookieValidation' => true
),
)

حواست باشه نام کنترلر و نام اکشن را به صورت 'siteController/actionGetPayLine' ننویس !به صورت 'site/GetPayLine' درسته.
برای من siteController/actionGetPayLine اکشنی است که اطلاعاتی برگشتی را از بانک ملت میگیرد و برای تایید دوباره به payLineمیفرستد.
منبع (http://www.yiiframework.com/forum/index.php/topic/14173-disable-csrf-token-validation-for-certain-paths/)