📌 Explain what is a session mechanism. How does it work in Rails?
📍 Очікувана відповідь: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