📍 Очікувана відповідь:
HTTP є stateless-протоколом, тому сесія — це спосіб зберегти стан між запитами.
За замовчуванням у Rails використовується
ActionDispatch::Session::CookieStore.Весь стан сесії серіалізується у JSON (починаючи з Rails 7), шифрується алгоритмом
AES-256-GCM (через ActiveSupport::MessageEncryptor) і зберігається прямо у браузері користувача.🔒 Завдяки шифруванню клієнт не може прочитати вміст, а завдяки криптографічному підпису — не може його підробити.
💡 Профі додасть про обмеження та альтернативи:
УCookieStoreє ліміт 4KB і відсутній швидкий механізм відкликання сесії з боку сервера (якщо куку вкрали, вона валідна, поки не спливеexpires). Тому для критичних систем краще конфігурувати:cache_store (на базі Redis або Solid Cache) — тоді в cookie зберігається лише випадковийsession_id, а самі дані лежать на сервері.
🛡 Захист від Session Fixation при автентифікації
def create
user = User.find_by(email: params[:email])
if user&.authenticate(params[:password])
# Повністю оновлюємо сесію перед записом нових даних
reset_session
session[:user_id] = user.id
redirect_to root_path
else
render :new
end
end
📌 Describe CSRF, XSS, session hijacking, and session fixation.
📍 Очікувана відповідь:
🔹 CSRF (Cross-Site Request Forgery) — атака, що змушує браузер авторизованого користувача виконати небажаний запит (POST/PUT/DELETE) на ваш додаток.
🛡 Захист: Rails (у non-API додатках) порівнює токен у параметрах/заголовках із токеном у сесії за допомогою
protect_from_forgery. Також допомагає прапорець SameSite=Lax або Strict для cookies.🔹 XSS (Cross-Site Scripting) — впровадження шкідливого JS-коду в сторінку.
🛡 Захист: Rails автоматично ескейпить вивід у шаблонах (через клас
ActiveSupport::SafeBuffer). Метод html_safe та хелпер raw слід використовувати обережно. Глобально додаток захищає налаштування Content Security Policy (CSP) заголовків.🔹 Session Hijacking — викрадення чужого session cookie (через MITM або XSS).
🛡 Захист: Робота виключно через HTTPS (
config.force_ssl = true), а також обов'язкові прапорці HttpOnly (забороняє JS читати куку) та Secure для сесійних файлів cookie.🔹 Session Fixation — ситуація, коли зловмисник нав'язує жертві свій
session_id до моменту логіну, а після авторизації користувача отримує доступ до його сесії.🛡 Захист: Обов’язковий виклик
reset_session одразу після успішного входу (популярні геми на кшталт Devise чи Rodauth роблять це автоматично під капотом).✅ Коротко:
На співбесіді важливо показати концепцію Defense in Depth (багаторівневий захист): ми не просто сподіваємося на магію фреймворку, а чітко розуміємо конфігурацію кук, HTTP-заголовки безпеки (
HSTS , CSP) та логіку роботи middleware (ActionDispatch).TikTok | Instagram | Telegram