2017-02-14 1 views
3

G'day! В дополнение к 40781534, для которого принят ответ должен установить SameSite=Lax:Как я могу перенаправить после OAUTH2 с SameSite = Strict и все еще получать мои файлы cookie?

Как я могу установить SameSite=Strict печенье на перенаправлении себя таким образом, что я буду получать печенье обратно из Chrome 56.0.2924.87, даже если запрос пользователя сам был перенаправлением со страницы входа в мой провайдер OAUTH2?

Полный запрос цепи:

  • POST https://provider.com/callback302 FOUND с:

    Location: https://me/login?code=xxx&state=yyy 
    
  • GET https://example.com/login?code=xxx&state=yyy302 FOUND или 303 SEE OTHER (кажется, не имеет значения) с:

    Location: https://example.com/destination 
    Set-Cookie: sid=zzzz; Secure; HttpOnly; SameSite=Strict; Path=/ 
    
  • GET https://example.com/destination401 GET OFF MY LAWN, потому что браузер не представит sid печенье

  • GET https://example.com/destination200 OK если я обновить, потому что тогда сайт совпадает и мой браузер представляет sid печенье

я ценю потенциал CSRF для представления sid до /destination для общего случая последней загруженной страницы пользователя, не находящейся на example.com, но Я только что установил его от /login, и я сейчас перенаправляю на /destination.

Несомненно, я мог бы установить SameSite=Lax, но тогда не было бы какой-то возможности для клик-подъема, если бы кто-то мог найти способ переназначить их выбор с моего сайта путем неправильного формирования URL-адреса?

ответ

1

Я не думаю, что это можно сделать по соображениям безопасности. SameSite=Strict означает, что если пользователь был перенаправлен или просто нажал ссылку на ваш сайт (с другого хоста), cookie не следует отправлять. И перенаправление похоже на запросы «цепочки». Поэтому, если ваш сервер перенаправляется на другой, и этот сервер перенаправляет обратно сразу с кодом 3xx, cookie будет отправлен, потому что ваш сервер «сверху» этой цепочки.

Однако, если вы перенаправляете поставщику oauth, и пользователь должен разрешить вам доступ к его учетной записи, это означает, что эта «цепочка» сломана, и cookie больше не будет отправлен, даже если ваш сайт устанавливает его (однако он установлен не отправлено). Ваш переадресация - это просто «расширение» щелкнутой ссылки «разрешить».

Если вы хотите, чтобы другие пользователи не могли щелкнуть ваш сайт, просто используйте nonce в ссылке, если вы думаете, что вам нужно предотвратить такое поведение, и это может быть опасно, если вы этого не сделаете. Но учтите, что большинство провайдеров проверяют вас, если URL-адрес перенаправления был предварительно определен и разрешен вашим приложением.

Другие решения (используйте только в том случае, если вы знаете, что делаете, и можете взять на себя 100% -ную ответственность).

  • Подготовки сайта с «Продолжить сайт» (печенье, конечно, будет отправлено после удара ссылки)
  • окна Reload с JavaScript
  • Подготовки сайта с JavaScript, который будет перенаправлять пользователь
  • комбината первыми и третий способ иметь более чистое решение и работать без поддержки JavaScript в браузере.

Я использовал второй при разработке, теперь я использую тот же сайт lax (это было по умолчанию в Hapi, возможно, 15 вер., Так что это не так уж плохо).

Смежные вопросы