API. Реализация защиты от сдачи без прокторинга
Если вы интегрируетесь по API, то вы можете реализовать скрипт защиты от сдачи тестирования без прокторинга.
Как это работает?
- Веб-приложение Examus отправляет сигнал на страницу тестирования, которая работает внутри iframe.
- Когда скрипт на странице тестирования получает сигнал, то данная страница убеждается в том, что прокторинг запущен в данный момент.
- При необходимости скрипт может заверить, что данная страница в LMS соответствует той, что указана в сессии прокторинга Examus.
Пример:
Пример страницы которая ведет себя по-разному с прокторингом и без него. Чтобы увидеть разницу, просто откройте страницу, применяя два разных метода:
- Нажмите на ссылку, то есть откройте страницу как top-level страницу.
- Создайте сеанс прокторинга с этой страницей в качестве URL экзамена и запустите его с помощью веб-приложения Examus.
Подробнее
Примечания по безопасности
- Страница экзамена убеждается в происхождении отправителя сообщения и, следовательно, доверяет отправителю.
- Веб-приложение Examus не аутентифицирует страницу внутри iframe никаким образом. Получается, что любой код, выполняющийся в iframe на странице с веб-приложением, может выяснить, активен ли прокторинг.
Веб-приложение Examus
При открытии тестирования
- добавляет к адресу экзамена ?examus-client-origin=
- ожидает загрузки страницы в iframe (readyState === 4)
- отправляет сообщение на страницу внутри iframe proctoringReady_n6EY
Скрипт внутри iframe
При загрузке на страницу теста, который должен быть запущен с прокторингом:
- Закрывает содержимое тестирования, как спиннер
- считывает searchParam examus-client-origin
- window.addEventListener('message', e => {})
- при получении сообщения:
- if (e.origin !== expectedOrigin) return
- затем узнает, активен ли прокторинг
- Проверка assessCode: // 4.3 и 4.4 - это проверка того, что студент сдает именно тот тест, который указан в сессии прокторинга Examus.
- Если assessCode не сохранен в сессии
- мы сохраняем этот код
- Если assessCode сохранен в сессии
- если сохраненный код совпадает с URL, то assessCodeIsValid = false
- если он не совпадает, то assessCodeIsValid = true
- Если assessCode не сохранен в сессии
- if (proctoringIsActive && assessCodeIsValid)
- снимается ограничение и студент сдаёт тест
- если нет, то он показывает инструкции о том, как правильно сдавать экзамен.