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

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

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

Сообщение Shappy » 2014.09.23, 22:37

Добрый вечер... Не могу понять как проверить 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 » 2014.09.23, 23:14

кажись при 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 » 2014.09.23, 23:23

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 » 2014.09.24, 00:04

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

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

Ну это должен быть ну очень частный случай.

Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

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

Сообщение Shappy » 2014.09.24, 06:40

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

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

Ну это должен быть ну очень частный случай.
У меня на сайте объявления, есть платные, деньги берутся за клик по платному объявлению...

belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

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

Сообщение belkod » 2014.09.26, 15:36

ну так проверяйте статус объявления платный или нет, а токен ведь и меняться может.

Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

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

Сообщение Shappy » 2014.09.26, 19:46

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

nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

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

Сообщение nepster » 2014.09.26, 19:54

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

Ответить