Phoenix Framework: злонамеренное повторное использование файлов cookie сеанса для доступа к веб-сайту

Для начала, сейчас я устанавливаю Plug.Session следующим образом:

plug Plug.Session,
    store: :cookie,
    key: "_key",
    signing_salt: "SALT_HERE"

Когда пользователь выходит из системы, он нажимает:

def logout(conn, _) do
    conn
    |> configure_session(drop: true)
    |> redirect(to: "/login")
  end

Все функции входа / выхода работают, и в форме входа снова создается новый _key. Проблема, с которой я столкнулся, заключается в том, что если я копирую значение _key во время входа в систему и заменяю значение cookie в браузере через отладчик Chrome, когда я выхожу из системы, я могу перейти к прямому GET URL-адрес без входа в систему, а затем можно получить доступ ко всему, как если бы я вошел в систему.

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


person balexander    schedule 19.12.2019    source источник


Ответы (1)


Способом борьбы с этим было бы перемещение хранилища сеансов из файлов cookie на сторону сервера. Когда у вас есть store: :cookie, вся информация о сеансе хранится на компьютере пользователя В файле cookie. Он зашифрован ключом, который хранится на сервере. Этот |> configure_session(drop: true) просто очищает cookie этого пользователя. Если вы измените хранилище сеанса на ets или redis на стороне сервера, cookie пользователя будет содержать только ключ, который ссылается на данные сеанса, хранящиеся на сервере, что дает вам полный контроль над аннулированием сеанса.

Пример пакета, который может вам в этом помочь: https://github.com/gotitbot/redbird

person codercycle    schedule 19.12.2019