Мое приложение будет иметь "часы в" в списке. Когда пользователь нажмет на этот элемент, он возьмет время/дату с самого телефона и отправит эти данные на сервер. Я предпочитаю делать это с использованием времени сервера, поскольку, если у них нет сигнала/приема, они не смогут синхронизировать. Я хотел бы добавить пароль в настройки самого времени и даты, чтобы пользователь не смог воспользоваться преимуществами изменяя время при входе в систему. Как я могу это сделать?
Спасибо
Я бы предложил просто отправить сообщение серверу "пользователь X хочет синхронизировать часы". И сервер будет использовать свое местное время для "синхронизации". Таким образом, вы полностью проигнорируете время устройства и получите больше контроля над своей инфраструктурой.
В общем, если вы хотите, чтобы что-то было как можно более безопасным, не делайте этого на стороне клиента (если вам не обязательно). И в этом случае пользователь может получить root на своем устройстве и использовать некоторую магию командной строки, чтобы обмануть вас сервером фальшивой датой/временем. Это не так сложно. И вы просто не сможете предсказать все умные обходные пути "защиты времени".
Я не думаю, что вы можете это сделать, но вы можете перекрестно проверить время.
Когда вы "часы в" также открываете /proc/uptime в виде текстового файла и читаете его там. Я считаю, что это за секунды. Когда вы выходите из игры, перечитайте значение и используйте разницу в качестве перекрестной проверки. Если сервер также доступен, проверьте время с сервера (или немедленно сообщите о синхронизации)
Если телефон выйдет из строя или отключен, разница в времени безотказной работы может быть меньше, чем то, что вы записали с помощью обычных часов. В этом случае разница в времени безотказной работы может быть меньше обычных часов (вероятно, это будет отрицательно), поэтому, если ваш тайм-аут был выполнен без доступа к сетевому времени, ваше программное обеспечение, возможно, должно было бы сообщить об этом конкретном результате как непроверенный, и отслеживать количество непроверенных на одного пользователя для отметки для проверки человека, если оно становится чрезмерным.
Пользователь может, возможно, скомпилировать и установить ядро, основанное на времени безотказной работы, но этот человек может, вероятно, обойти большинство других вещей, которые вы бы тоже сделали.
Вы можете настроить службу для запуска каждую минуту (или так), которая проверяет время. Если время не составляет ~ 1 минута после последней проверки, оно может быть изменено. Вы должны подтвердить это с помощью сервера на этом этапе, чтобы убедиться, что расхождение не было вызвано перезагрузкой телефона.
Если вы обнаружите, что время было изменено, вы можете изменить его или зарегистрировать в главном приложении и пометить "пользователь" для дисциплинарных действий.