Вы должны контролировать как пользователя, так и сервера. Javascript хорош для пользовательской стороны, чтобы дать им предупреждение, когда они близки к нехватке времени, но вы должны также проверить серверную часть, когда она отправлена. Я бы порекомендовал прикрепить скрытое поле в тесте, которое имеет временную метку времени, в которое тест был запущен, затем при отправке вы можете сравнить начальное время с представленным временем, чтобы убедиться, что они не превысили свое время. Никогда не полагайтесь только на проверку на стороне клиента.
Редактировать
Другой вариант, согласно комментариям, состоит в том, чтобы иметь базу данных, в которой вы сохраняете временные метки их тестов, время, когда они запускают тест, затем при отправке сервер сравнивает время, и если они не совпадают, они ничего не получают. Это полностью исключает пользователя, включая часовые пояса, так как все сравнивается с серверным временем. Я бы по-прежнему рекомендовал отслеживать время с помощью javascript на стороне пользователя для тех не злых пользователей, которые просто хотят знать, сколько у них времени.