Проверка CSRF-токена

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Проверка CSRF-токена

Сообщение Shappy »

Добрый вечер... Не могу понять как проверить csrf-token... У меня get запрос, необходима проверка, но в методе проверки:

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

/**
     * Performs the CSRF validation.
     * The method will compare the CSRF token obtained from a cookie and from a POST field.
     * If they are different, a CSRF attack is detected and a 400 HTTP exception will be raised.
     * This method is called in [[Controller::beforeAction()]].
     * @return boolean whether CSRF token is valid. If [[enableCsrfValidation]] is false, this method will return true.
     */
    public function validateCsrfToken()
    {
        $method = $this->getMethod();
        // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
        if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
            return true;
        }

        $trueToken = $this->loadCsrfToken();

        return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)
            || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);
    }

 
А при Yii::$app->getRequest()->csrfToken токен выдается новый... Как мне проверить входящий csrf токен из get-запроса?
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Проверка CSRF-токена

Сообщение nepster »

кажись при GET запросе его не нужно проверять. Вообще yii2 его сам проверяет.

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

        if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
            return true;
        } 
['GET', 'HEAD', 'OPTIONS'] - вот для этих методов, всегда true
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: Проверка CSRF-токена

Сообщение Shappy »

nepster писал(а):кажись при GET запросе его не нужно проверять. Вообще yii2 его сам проверяет.

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

        if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
            return true;
        }
['GET', 'HEAD', 'OPTIONS'] - вот для этих методов, всегда true
Да, вот только мне при get запросе понадобилось проверить... :(
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Проверка CSRF-токена

Сообщение nepster »

Напомните зачем вам это нужно ?

В такой ситуации на ум приходит создать MyRequest.php, который будет наследовать https://github.com/yiisoft/yii2/blob/ma ... equest.php и в нем переопределить validateCsrfToken().
Тоесть например вырезать проверку на метод.

Ну это должен быть ну очень частный случай.
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: Проверка CSRF-токена

Сообщение Shappy »

nepster писал(а):Напомните зачем вам это нужно ?

В такой ситуации на ум приходит создать MyRequest.php, который будет наследовать https://github.com/yiisoft/yii2/blob/ma ... equest.php и в нем переопределить validateCsrfToken().
Тоесть например вырезать проверку на метод.

Ну это должен быть ну очень частный случай.
У меня на сайте объявления, есть платные, деньги берутся за клик по платному объявлению...
belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: Проверка CSRF-токена

Сообщение belkod »

ну так проверяйте статус объявления платный или нет, а токен ведь и меняться может.
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: Проверка CSRF-токена

Сообщение Shappy »

belkod писал(а):ну так проверяйте статус объявления платный или нет, а токен ведь и меняться может.
А от xss как защищаться? Да и просто от размещения где-либо ссылки? Т.е. Представь, деньги берутся за клик, я размещаю на популярном сайте ссылку, напишу что там голые девочки:), по нажатии на которую будет переход по ссылке на платное объявление, как будто ты кликнул на это объявление, деньги снимутся, а не должны... Мне необходимо было проверять что человек заходил на сайт, что он кликнул по ссылке из поиска... Ну я по-другому вышел из ситуации... С токеном не стал разбираться...
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Проверка CSRF-токена

Сообщение nepster »

токен нужен для проверки формы (тоесть для проверки входящих данных), чтобы не могли там как-то подменить данные. В вашем случае вам нужно проверять реферер походу.
Ответить