ios - 我可以阻止 iOS 用户更改日期和时间吗?

标签 ios clock mdm

我想为公司员工部署托管 iOS 设备,他们将使用的应用程序将在本地记录的数据加上时间戳,然后转发。我需要这些时间戳是正确的,所以我必须防止用户调整设备上的时间、记录一个值,然后重置日期和时间。日期和时间将自动配置为来自网络,但设备可能始终没有网络连接(否则每次记录数据值时我都会读取网络时间)。我在 Apple Configurator 中没有看到防止更改日期和时间的选项,那么还有其他方法可以做到这一点吗?

最佳答案

您将无法阻止用户更改他们的时钟或直接点击您的 API,就像其他评论员发布的那样。这是两个不同的问题,可以通过在设备上控制本地时间并为发送到服务器的内容生成散列 key 来解决。

设备本地时间:

首先,当您启动从服务器发回时间戳的应用程序时进行 API 调用;这是你的“实际时间”。现在将其存储在设备上并运行一个使用手机正常运行时间功能的计时器(不是 mach_absolute_time()CACurrentMediaTime() - 当您的手机处于待机模式时,这些会变得很奇怪) 和一些数学来每秒增加实际时间。我有 written an article on how I did this对于我的一个应用程序(请务必阅读 follow up,因为原始文章使用了 CACurrentMediaTime() 但它有一些错误)。您可以定期进行初始 API 调用(即,如果手机进入后台并再次返回)以确保一切都保持准确,但只要您不重启手机(应该下次打开应用程序时提示 API 调用以更新时间)。

保护 API:

您现在在您的设备上有一个保证*准确的时间,但您仍然有一个问题,即有人可能会直接将错误的时间发送到您的 API(即不是从您的设备)。为了抵消这一点,我将对您发送的数据使用某种形式的 salt/hash,类似于 OAuth。例如,获取您发送的所有参数,将它们连接在一起并使用只有您知道的盐对它们进行哈希处理,然后将生成的 key 作为额外参数发送。在您的服务器上,您知道您正在使用的散列和盐,因此您可以重建该 key 并使用发送的 key 进行检查;如果它们不匹配,则表明有人在尝试使用您的时间戳。

*警告:熟练的攻击者可以劫持连接,以便对 example.com/api/timestamp 的任何调用都来自他们设置的另一台机器,这台机器会返回他们想要的时间,这样手机就会出错时间作为起始基数。有一些方法可以防止这种情况(混淆、将其与其他数据配对、加密),但这很快就会成为一个非常开放的问题,所以最好在别处提问。将上述各项加上一个监测异常时间的监视器可能是最好的选择。

关于ios - 我可以阻止 iOS 用户更改日期和时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588243/

相关文章:

使用 clock() 函数计算 C 中 system() 命令的运行时间

ios - 如何为 iOS 创建 MDM 注册配置文件

objective-c - 应用程序重新打开时执行代码

timer - 使用STM32定时器

ios - 此处 map iOS SDK 中的静音语音方向

javascript - 检查模拟时钟的指针位置是否正确

python - 拥有 iOS MDM 服务器

ios - ios 企业分发在实践中究竟是如何工作的

ios - NSPredicate 不返回任何获取请求的结果,适用于数组过滤

ios - 如何修复 Swift Playground 中的 'Couldn' t 查找符号错误