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

2023-11-24

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


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

设备当地时间:

首先,在启动应用程序时进行 API 调用,该调用会从服务器发回时间戳;这是你的“实际时间”。现在将其存储在设备上并运行一个使用电话正常运行时间功能的计时器(不是mach_absolute_time() or CACurrentMediaTime()- 当你的手机处于待机模式时,这些会变得很奇怪),并且需要一些数学来增加每秒的实际时间。我有写了一篇关于我是如何做到这一点的文章对于我的应用程序之一(请务必阅读跟进正如原始文章所使用的CACurrentMediaTime()但这有一些错误)。您可以定期进行初始 API 调用(即,如果手机进入后台并再次返回),以确保一切保持准确,但只要您不重新启动手机,时间就应该始终正确(这应该当您下次打开应用程序以更新时间时提示 API 调用)。

保护 API 的安全:

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

*警告:熟练的攻击者可能会劫持连接,以便对 example.com/api/timestamp 的任何调用都来自他们设置的另一台机器,该机器返回他们想要的时间,从而使手机得到错误的时间起始基地。有一些方法可以防止这种情况(混淆、将其与其他数据配对、加密),但这很快就会成为一个非常开放的问题,因此最好在其他地方询问。将上述功能与监视器相结合以注意到奇怪的时间可能是最好的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以阻止 iOS 用户更改日期和时间吗? 的相关文章

随机推荐

  • 为什么我应该使用 Deque 而不是 Stack?

    我需要一个Stack我的用例的数据结构 我应该能够将项目推送到数据结构中 并且我只想从堆栈中检索最后一个项目 这堆栈的 JavaDoc says 一组更完整且一致的 LIFO 堆栈操作是 由 Deque 接口及其实现提供 应该 优先使用此类
  • 2x2 按钮网格布局

    我正在尝试创建一个包含 2x2 按钮网格 总共 4 个 的布局 我有以下内容 但它只在左上角创建按钮网格 我希望按钮网格填满整个屏幕
  • 设置输入框背景

    我必须创建一个具有以下背景的输入框 到目前为止 在我的代码中 我有下面的代码 但它没有显示 gt 执行此操作的正确程序是什么 我还必须制作此按钮的几个变体 如下所示 按钮黑色区域上的十字 我只是要使用 span 标记一个类并将图形设置为该类
  • 在 C++ 中从向量复制到向量

    我创建一个向量 A 并想使用以下方法复制到另一个类中的向量 B 这是正确的方法吗 向量A可能会被破坏 我在谷歌搜索 但没有找到好的解决方案和有意义的解释 感谢大家 void StateInit vector
  • Android 上的 OpenId

    我想让我的用户能够使用他们的 OpenId 登录我的 Android 应用程序 有一个像 StackOverflow 一样的文本字段 并要求用户在那里输入他的 OpenId 我环顾四周 但找不到任何允许我在 Android 上实现客户端 O
  • Laravel 5 Flysystem - 从远程磁盘下载文件

    我正在使用 Flysystem 在 Rackspace 上存储站点的文件 上传没问题 但无法弄清楚如何开始下载文件 这是我尝试过的 Storage disk rackspace return response gt download fil
  • 为什么追加documentFragment时需要使用cloneNode?

    我一直在考虑在 Backbone js 应用程序中使用 documentFragments 并且想知道为什么我看到在将 documentFragment 附加到父 DOM 元素时使用 cloneNode 的示例 可以看一个例子here 如果
  • jsr 关键字是什么意思?

    我正在查看一些 Java 代码 并且注意到以下内容 if foo bar baz qux i 0 jsr 433 javac 被它噎住了 说这不是一个语句 并且关键字后面应该有一个分号jsr 我做了一些谷歌搜索 我发现一些包含相同内容的代码
  • Heroku - 无法通过 Play Framework 应用程序设置 postgres 数据库?

    我正在尝试通过 Play Framework 应用程序在 heroku 上设置 postgres 数据库 但我不断收到有关 DATABASE URL 的错误 堆栈跟踪 gt Heroku receiving push gt Play 2 0
  • Flask 蓝图中的 render_template 使用其他蓝图的模板

    我有一个带有蓝图的 Flask 应用程序 每个蓝图都提供了一些模板 当我尝试渲染时index html第二个蓝图的模板 将渲染第一个蓝图的模板 为什么 blueprint2 会覆盖 blueprint1 的模板 如何渲染每个蓝图的模板 ap
  • Cordova Phonegap IOS 应用程序设置。捆绑可能吗?

    所以我是移动开发的新手 但我即将使用 HTML CSS JS 和 Cordova PhoneGap 3 完成我的第一个 IOS 应用程序 我试图允许用户通过 iPhone 的本机 设置 应用程序提供文本输入 灰色齿轮图标 我的应用程序将在
  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 物化视图和表同名

    我有点理解物化视图并且以前曾与它们合作过 最近出现了一个问题 为什么特定报告没有显示最新数据 我调查了这个问题 显然 他们之前有一个加载了 crontab 的临时表 后来切换到了物化视图 当我使用以下查询查看数据库时 表名称已更改 SELE
  • 如何在wp7中设置可点击的文本块中的链接

    我有一个包含链接的文本框 文本中的内容是在运行时生成的 我的问题是文本内的链接不可单击 如何使文本块内的所有链接可单击 以便当我点击链接时它应该打开网络浏览器 在android中 我们可以使用自动链接来设置它 这样的选项在wp7或wp7 1
  • 如何使用动态 OR 语句构建 Linq 查询?

    以下代码 var dynamicQuery from a in context Users select a string args new string aa bb cc foreach string word in args dynam
  • 内部可变性如何影响缓存行为?

    我正在尝试创建一个struct这需要一个Path并根据需要从指定路径加载图像 这是我到目前为止所拥有的 extern crate image use std cell RefCell use std path Path use image
  • 如何在 swagger codegen 中注入自定义 spring 验证?

    我们能够使用 openApi 文档并使用 spring swagger codegen 生成 Java 输入类 此外 我们可以在为常见约束 如长度 强制等 生成输入时注入 javax validation 注释 我希望将其提升到下一个自定义
  • 用jquery查找并替换文本,只有文本没有子元素

    我想用 jquery 查找并替换文本 我想将 SKU 更改为 art nu span class sku wrapper SKU span class sku 5 144 span span I tried product meta gt
  • AWS SNS 创建超时

    我有 Lambda 函数 在调用时它会创建 SNS 主题 向其添加订阅者 然后向其发布消息 发布消息后 它会删除该主题 要创建的主题的名称和订阅者作为负载提供给 lambda 函数 有时有效 有时失败Task timed out after
  • 我可以阻止 iOS 用户更改日期和时间吗?

    我想为公司员工部署托管 iOS 设备 他们将使用的应用程序将为数据添加时间戳 这些数据将在本地记录 然后转发 我需要这些时间戳是正确的 因此我必须防止用户调整设备上的时间 记录值 然后重置日期和时间 日期和时间将配置为自动来自网络 但设备可