RB Ruby  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Безопасность Ruby-приложений

Тест «Безопасность Ruby-приложений» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 30 вопросов, 18 заданий с Ruby-кодом и 6 тематических шкал.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 6 тематических результатов и разбор всех ответов.
Вопрос 1 из 30
Какое описание результата точно соответствует показанному коду «Массовое присваивание атрибутов»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Массовое присваивание атрибутов
# Проследите выполнение и выберите точный результат.
def profile_params
  params.require(:user).permit(:name, :timezone)
end

current_user.update!(profile_params)
Вопрос 2 из 30
Как следует прочитать результат показанного примера «XSS и CSRF»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — XSS и CSRF
# Проследите выполнение и выберите точный результат.
# ERB
# Безопасная форма для обычного текста:
# <%= comment.body %>
# Опасная без строгой очистки:
# <%= comment.body.html_safe %>
Вопрос 3 из 30
Как изменится состояние программы после выполнения кода по теме «Инъекции»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Инъекции
# Проследите выполнение и выберите точный результат.
directions = { 'oldest' => :asc, 'newest' => :desc }
direction = directions.fetch(params[:order], :desc)
records = Event.order(created_at: direction)
Вопрос 4 из 30
Что покажет выполнение этого фрагмента из раздела «Управление секретами»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Управление секретами
# Проследите выполнение и выберите точный результат.
api_key = Rails.application.credentials.dig(:payments, :api_key)
raise 'payment key is missing' if api_key.nil? || api_key.empty?
PaymentClient.new(api_key: api_key)
Вопрос 5 из 30
Как следует прочитать результат показанного примера «Профилирование решения»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Профилирование решения
# Проследите выполнение и выберите точный результат.
require 'benchmark'
input = File.read('fixture.json')
puts Benchmark.measure {
  1_000.times { SafeParser.call(input) }
}
Вопрос 6 из 30
Разберите выражения по порядку. Как завершится фрагмент из раздела «Архитектурные компромиссы»? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Архитектурные компромиссы
# Проследите выполнение и выберите точный результат.
# Идея настройки ролей, выполняется администратором БД:
# GRANT SELECT, INSERT, UPDATE ON orders TO web_app;
# REVOKE DELETE ON audit_events FROM web_app;

p ActiveRecord::Base.connection_db_config.configuration_hash[:username]
Вопрос 7 из 30
Какой дефект может проявиться на границе показанного сценария «Массовое присваивание атрибутов»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Массовое присваивание атрибутов
# Обычный запуск проходит. Найдите скрытый риск.
def profile_params
  params.require(:user).permit(:name, :timezone)
end

current_user.update!(profile_params)
Вопрос 8 из 30
Какое скрытое условие делает фрагмент «XSS и CSRF» хрупким? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — XSS и CSRF
# Обычный запуск проходит. Найдите скрытый риск.
# ERB
# Безопасная форма для обычного текста:
# <%= comment.body %>
# Опасная без строгой очистки:
# <%= comment.body.html_safe %>
Вопрос 9 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Инъекции»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Инъекции
# Обычный запуск проходит. Найдите скрытый риск.
directions = { 'oldest' => :asc, 'newest' => :desc }
direction = directions.fetch(params[:order], :desc)
records = Event.order(created_at: direction)
Вопрос 10 из 30
Какой дефект может проявиться на границе показанного сценария «Управление секретами»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Управление секретами
# Обычный запуск проходит. Найдите скрытый риск.
api_key = Rails.application.credentials.dig(:payments, :api_key)
raise 'payment key is missing' if api_key.nil? || api_key.empty?
PaymentClient.new(api_key: api_key)
Вопрос 11 из 30
Что в реализации по теме «Профилирование решения» требует исправления прежде всего? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Профилирование решения
# Обычный запуск проходит. Найдите скрытый риск.
require 'benchmark'
input = File.read('fixture.json')
puts Benchmark.measure {
  1_000.times { SafeParser.call(input) }
}
Вопрос 12 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Архитектурные компромиссы»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Архитектурные компромиссы
# Обычный запуск проходит. Найдите скрытый риск.
# Идея настройки ролей, выполняется администратором БД:
# GRANT SELECT, INSERT, UPDATE ON orders TO web_app;
# REVOKE DELETE ON audit_events FROM web_app;

p ActiveRecord::Base.connection_db_config.configuration_hash[:username]
Вопрос 13 из 30
Какой механизм объясняет и обычный, и граничный сценарий «Массовое присваивание атрибутов»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 14 из 30
Какой принцип темы «XSS и CSRF» переносится на другие примеры того же типа? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 15 из 30
Какое правило Ruby или Rails объясняет поведение в теме «Инъекции»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 16 из 30
Как сформулировать правило блока «Управление секретами» без лишних обещаний? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 17 из 30
Какое свойство Ruby или Rails определяет результат примера «Профилирование решения»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 18 из 30
Какое правило Ruby или Rails объясняет поведение в теме «Архитектурные компромиссы»? Правильным считается только полностью согласованное утверждение.
Вопрос 19 из 30
Какое изменение устраняет причину проблемы в теме «Массовое присваивание атрибутов», а не маскирует симптом? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Массовое присваивание атрибутов
# Выберите изменение, которое исправляет причину.
def profile_params
  params.require(:user).permit(:name, :timezone)
end

current_user.update!(profile_params)
Вопрос 20 из 30
Какое инженерное решение лучше всего соответствует механизму «XSS и CSRF»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — XSS и CSRF
# Выберите изменение, которое исправляет причину.
# ERB
# Безопасная форма для обычного текста:
# <%= comment.body %>
# Опасная без строгой очистки:
# <%= comment.body.html_safe %>
Вопрос 21 из 30
Какой вариант решения «Инъекции» останется понятным при сопровождении? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Инъекции
# Выберите изменение, которое исправляет причину.
directions = { 'oldest' => :asc, 'newest' => :desc }
direction = directions.fetch(params[:order], :desc)
records = Event.order(created_at: direction)
Вопрос 22 из 30
Какое исправление уменьшает риск, не скрывая исходное поведение «Управление секретами»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Управление секретами
# Выберите изменение, которое исправляет причину.
api_key = Rails.application.credentials.dig(:payments, :api_key)
raise 'payment key is missing' if api_key.nil? || api_key.empty?
PaymentClient.new(api_key: api_key)
Вопрос 23 из 30
Какой рефакторинг переводит правило «Профилирование решения» из договорённости в проверяемый контракт? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Профилирование решения
# Выберите изменение, которое исправляет причину.
require 'benchmark'
input = File.read('fixture.json')
puts Benchmark.measure {
  1_000.times { SafeParser.call(input) }
}
Вопрос 24 из 30
Какой вариант решения «Архитектурные компромиссы» останется понятным при сопровождении? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Архитектурные компромиссы
# Выберите изменение, которое исправляет причину.
# Идея настройки ролей, выполняется администратором БД:
# GRANT SELECT, INSERT, UPDATE ON orders TO web_app;
# REVOKE DELETE ON audit_events FROM web_app;

p ActiveRecord::Base.connection_db_config.configuration_hash[:username]
Вопрос 25 из 30
Какой регрессионный пример обнаружит ошибочное обобщение в теме «Массовое присваивание атрибутов»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 26 из 30
Какой контрпример проверит реальную границу механизма «XSS и CSRF»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 27 из 30
Какой регрессионный пример обнаружит ошибочное обобщение в теме «Инъекции»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 28 из 30
Что следует добавить в набор проверок по теме «Управление секретами», чтобы поймать редкий отказ? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 29 из 30
Какой случай покажет, что исправление «Профилирование решения» не держится на удачном входе? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 30 из 30
Какую проверку стоит добавить, чтобы не ограничиться счастливым путём «Архитектурные компромиссы»? Правильным считается только полностью согласованное утверждение.

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу