Страница 1 из 1

SPA приложение токен в куках и csrf

Добавлено: 2019.09.25, 10:40
raketa
Интересно мнение кто как делает и какие мыcли по этому поводу.
Допустиv решено хранить api токен в куках с http only и secure как более безопасный способ с точки зрения xss в сравнении с localstorage. В этом случае нужна защита от csrf. Решение в лоб это csrf куки без http only с последующей вставкой в заголовок запроса через javascript
Но так как куки в Yii дополнительно защищены просто использовать их для вставки в запрос не получится, нужен какой то другой способ передачи токена в SPA приложение.
Spa приложение отделено от бэкенда, заранее вставлять токен в мета теги нет возможности.
Какие видите варианты чтобы передать csrf токен?
Один из вариантов не шифровать csrf куки, как я знаю в Yii нет готовой реализации для этого. НЕ специалист по безопасности но кажется шифровать csrf куки нет смысла.

Re: SPA приложение токен в куках и csrf

Добавлено: 2019.09.25, 11:24
raketa
Решение из laravel

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

    protected function getTokenFromRequest($request)
    {
        $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
        if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
            $token = $this->encrypter->decrypt($header, static::serialized());
        }
        return $token;
    }
Если есть токен в теле запроса используем его, если есть в хидере X-CSRF-TOKEN используем его,
если же есть X-XSRF-TOKEN то это зашифрованное значение кук, куки в сыром виде, делаем дешифровку.
Не хватает таких вещей в Yii

Re: SPA приложение токен в куках и csrf

Добавлено: 2019.09.25, 11:57
yiiliveext
Добавляете в заголовок X-CSRF-Token запроса и для проверки используете Yii::$app->request->validateCsrfToken()

Re: SPA приложение токен в куках и csrf

Добавлено: 2019.09.25, 12:26
raketa
Вопрос не в этом. Чтобы добавить токен в заголовок его надо откуда то взять. ОДин из вариантов брать куки, но если значение куки передавать в заголовке то проверка не пройдет.

Re: SPA приложение токен в куках и csrf

Добавлено: 2019.09.25, 12:33
yiiliveext
Передаете его в actionLogin и храните в localStorage, передаете в заголовках non-safe запросов.

Re: SPA приложение токен в куках и csrf

Добавлено: 2019.09.25, 18:49
raketa
есть такой вариант, но нужна будет еще механика своевременного обновления csrf токена

Re: SPA приложение токен в куках и csrf

Добавлено: 2019.09.26, 10:55
yiiliveext
raketa писал(а): 2019.09.25, 18:49 есть такой вариант, но нужна будет еще механика своевременного обновления csrf токена
Обновляйте в том же actionLogin.

Re: SPA приложение токен в куках и csrf

Добавлено: 2019.12.30, 12:55
evgeniy123
А чем jwt +refresh token не подходит и хранение в localStorage?