NSDate:获取独立于设备时钟的精确时间? [复制]

2023-12-30

可能的重复:
如何在应用程序运行之间本地检测用户的 iPhone 时钟进度? https://stackoverflow.com/questions/7122216/how-can-i-locally-detect-iphone-clock-advancement-by-a-user-between-app-runs
有没有办法确定iOS中的实际时间和日期(而不是设备的时间) https://stackoverflow.com/questions/12006245/is-there-a-way-to-determine-the-actual-time-and-date-in-ios-not-the-time-of-the
iOS 中是否有一个可以使用但用户无法更改的时钟 https://stackoverflow.com/questions/11413616/is-there-a-clock-in-ios-that-can-be-used-that-cannot-be-changed-by-the-user

Brief

我正在使用一个基于自动更新订阅的应用程序。当应用程序收到 Apple 的最新收据时,它会存储expires_date_ms key in NSUserDefaults。该日期后三十天,该应用程序会与 Apple 核实订阅是否仍然有效。该应用程序可以被视为离线应用程序,但它必须每 30 天连接到互联网一次才能检查订阅状态。这次比较将用于告诉用户他/她必须连接。

Problem

我正在使用下面的代码将当前时间与expires_date_ms:

NSTimeInterval expDateMS = [[productInfo objectForKey:@"expires_date_ms"] doubleValue];
NSTimeInterval currentDateMS = ([[NSDate date] timeIntervalSince1970] * 1000);

if (currentDateMS > expDateMS)
    subExpired = YES;

这很好并且运行良好,但据我所知,存在一个可以被利用的漏洞 - 如果用户将设备的时钟向后设置一小时/一个月/十年,时间比较将变得不可靠,因为[NSDate date]使用设备的当前时间(如果我错了,请纠正我)。

Question

有没有办法以毫秒为单位检索与设备无关的时间?一种可以在不考虑设备时钟的情况下准确可靠地进行测量的技术?


虽然 Kevin 和 H2CO3 是完全正确的,但还有其他解决方案可用于检查订阅(我希望不需要毫秒精度......)

第一次观看UIApplicationSignificantTimeChangeNotification以便您在时间突然改变时收到通知。如果您被停职,这甚至会发送给您(尽管我不相信如果您被解雇,您会收到它)。当运营商时间更新时会调用此函数,我believe当有手动时间更新(检查)时调用它。它也会在当地午夜和夏令时更改时调用。重点是,当时间突然改变时,它经​​常被调用。

跟踪进入后台的时间。跟踪您返回前台的时间。如果时间大幅倒退(超过一两天),请建议您访问网络来检查情况。每当您向服务器签入时,它都应该告诉您它认为现在是什么时间。您可以使用它来同步系统。

您可以类似地跟踪您的实际运行时间。如果它与明显的运行时间严重不同步,那么再次请求访问网络以同步。

我确信攻击者能够从该系统中偷偷溜走 35 天或其他时间,而不是 30 天,但任何愿意努力工作的人都会破解您的软件并完全检查。这里的焦点是那些不负责任的攻击者,他们只是在扰乱他们的时钟。而且你可以很好地捕捉到。

您应该仔细测试这一点,并且非常犹豫是否要指责用户任何事情。只需连接到您的服务器就足以让合法用户再次工作。

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

NSDate:获取独立于设备时钟的精确时间? [复制] 的相关文章

  • 将 MPMoviePlayerController 的视图添加到 UIView

    我想添加MPMoviePlayerController to a UIView 首先 我在 xib 文件中放置了一个视图 名为 youTubeView youtube播放器是MPMoviePlayerController youtubePl
  • iOS 上 Safari 中的 shift 键

    有没有办法在javascript中判断手机键盘上是否按下了shift键 并将其与大写锁定 按两次shift键 区分开来 一些事实 首先 让我们看一下有关 iOS 键盘的一些事实 我假设您已经知道了 当您进入键盘模式时 shift键始终处于激
  • iOS 无法获取人物图像

    我有两个 tableViewController 第一个有联系人列表 另一张显示详细的人员信息 第一个tableViewController的一段代码 ABAddressBookRef addressBook ABAddressBookCr
  • Flutter-iOS 当应用程序更新/重新编译时存储的图像丢失

    嗨 请原谅我的英语 也是 flutter iOS 的新手 我在 iOS 上有一个关于 flutter 的应用程序 用户可以从他们的相机和图库中拍摄照片和视频 我正在使用 image picker 包 这没有问题 然后我将其保存在在其应用程序
  • 如何本地化 iOS 故事板

    我有一个包含一些视图的 iPhone 故事板 例如 导航项标题名为News 应翻译为其他语言 当我向故事板添加新的本地化版本时 它会为新语言创建当前故事板的副本 在这里我可以更改导航项的标题 但对我来说它似乎不太有用 如果我的故事板包含 1
  • 如何从标签栏控制器上方显示 UIActionSheet 视图?

    我需要在选项卡栏控制器上方显示操作表 我的意思是 即使操作表视图处于可见模式 我也能够看到选项卡栏控制器 因此 请建议如何从选项卡栏控制器上方查看 是否可以 其次 如何更改操作表的背景颜色和取消按钮背景颜色 请帮我 谢谢你 马丹 莫汉 要从
  • NSString 对象的最大长度是多少?

    NSString 对象中可以保存的最大字符串大小是多少 这会动态变化吗 我假设 NSString 的硬限制是 NSUIntegerMax 个字符 因为 NSString 的索引和大小相关的方法返回 NSUInteger 由于当前能够运行 i
  • 如何使用逗号和行分隔符对字符串进行标记

    我正在 Swift 中制作一个简单的 String Tokenizer 就像在 Java 中一样 但这对我来说确实不起作用 我的数据源中每行的末尾用 分隔 数据用逗号分隔 例如 字符串 1 字符串 2 字符串 3 字符串 1 字符串 2 字
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 与 parse-server 和 auth0 的自定义身份验证集成

    我想将 auth0 com 与开源解析服务器结合使用 我当前的方法是通过 iOS 的 Lock 库使用标准登录从 auth0 获取令牌 使用该令牌 我想在解析服务器上调用自定义身份验证方法 该方法检查令牌是否有效 如果有效则将登录用户 我的
  • iPhone 的翻译器?

    我对为 iPhone 制作一个解释器很感兴趣 这将是一个实验性的想法 但可能会很棒 我喜欢让我自 己的语言适合移动计算和数学的想法 我查阅了很多资料 发现有关 iPhone 上的口译员的信息很复杂 苹果会允许什么 我见过这个应用程序 这是一
  • 无法在 xcode 8 beta 6 上编译 AWS CustomIdentityProvider

    我在 iOS 应用程序中使用 Amazon Cognito 和 Facebook 登录 直到 beta 5 为止此代码从这个SO线程 https stackoverflow com questions 37597388 aws cognit
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • iOS 7 NS 单线程安全合并冲突

    重新排序两行后 在单线程应用程序上保存简单的数据时遇到问题 我已经成功地简化了编码以重现错误 并且希望其他人尝试这一点时得到第二个意见 这是一次健全性检查 因为我怀疑 iOS 7 引入的核心数据问题 而这在 iOS 6 中工作正常 首先 启
  • UIScrollView 与 UITabBarController 切断

    我有一个 UIScrollView 我将其放置在视图中 界面生成器文档 xib m h 但是 UIScrollView 的下半部分被剪切 并且由于我有一个 UITabBarController 而没有显示其下半部分 我在 appdelega
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • dispatch_semaphore_t 重用 - 我在这里缺少什么?

    我有一些代码 其中使用dispatch semaphore t 来表示操作完成 当信号量是成员变量时 它的行为似乎不正确 我将展示有效的示例代码和似乎无效的示例代码 implementation someClass dispatch sem
  • iOS 目标 c 中的 AES/CBC/PKCS5Padding 结果与 Android 不同

    我在 Android 应用程序中使用 AES CBC PKCS5Padding 代码就像 private static String TRANSFORMATION AES CBC PKCS5Padding private static St

随机推荐

  • 将应用程序从一个 Admob 帐户转移到另一个帐户

    刚刚将我的 Android 应用程序转移到另一个 Google Play 开发者帐户 以便在巴基斯坦而不是美国获得付款 我还有 Admob 帐户 付款仅发送到美国 现在我想在巴基斯坦接收付款 因此我想将我的应用程序转移到另一个地址为巴基斯坦
  • 找出 python 中的类实例可以使用哪些函数?

    如何动态地找出类实例中定义了哪些函数 例如 class A object def methodA self intA 1 pass def methodB self strB pass a A 理想情况下 我想找出实例 a 有 method
  • 如何在Linux主机上运行Windows docker容器?

    我们可以在 Linux 主机上运行 Windows docker 容器吗 还可以从同一网络中的其他 Windows 计算机通过 RDP 访问 Linux 上托管的 Windows docker 容器吗 今天 这显然是可能的 我最近使用 QE
  • 如何向 GET 请求发送巨大的参数列表

    我的服务器中有一个 REST API 其中List操作 应使用 GET 方法实现 从客户端接收多个参数 当前页面 行数 用于执行快速搜索的文本 定义复杂搜索过滤器的对象 字段操作值 形式的规则集 由于这个用于过滤搜索的复杂对象 我需要将列表
  • Xamarin Forms.Xaml.XamlParseException

    我正在创建一个 xamarin 行为来验证电子邮件 ID 因此我创建了行为文件并尝试在 XAML 文件中将其本地化 但出现以下错误 Xamarin Forms Xaml XamlParseException 位置 12 10 类型 本地 在
  • WCF 教程出现错误 400(错误请求)?

    我昨晚开始使用 WCF 设置一个简单的客户端服务器 它允许我在会话开始时向客户端发送游戏信息 我按照微软关于 WCF 的教程并使用 VS2008 WcfSerivce 模板开始并添加了我的方法 然后 我将其提供的地址复制并粘贴到客户端项目中
  • c# 最后插入id

    我正在使用带有以下 sql 的存储过程 INSERT INTO dbTblUsers strUsername strPassword VALUES p1 p2 SELECT IDENTITY 并调用该过程 Insert new user n
  • 自 C++14 起,尾随返回类型语法的合法使用

    实际上是否有任何理由再使用以下语法 template
  • 如何在 HttpClient 上设置默认用户代理?

    这很容易设置用户代理 https stackoverflow com questions 33659663 how to set user agent with system net webrequest in c sharp on an
  • 8 个后续字节的测试不会转换为单个比较指令

    动机是这个问题 https stackoverflow com q 63390851 580083 我比较了三个不同的函数来检查参数指向的 8 个字节是否为零 请注意 在原始问题中 字符与 0 not 0 bool f1 const cha
  • 如何使用 PC 键盘在 Android 模拟器中输入

    我无法使用 PC 键盘输入模拟器 谁能帮我 转到 Windows gt Avd Manager 选择您的 AVD 并对其进行编辑 然后在 硬件 部分下添加键盘支持 使其布尔值变为 true 并享受使用 PC 键盘打字的乐趣
  • 具有动态条目的自定义 ListPreference

    我需要 ListPreference 中的动态条目 因此我无法使用传统的 XML 设置方式 网上有大量材料 到目前为止 我已经进行了以下设置 如下所示 问题是 当我运行这个时 我看到带有标题和消息的对话框 但没有显示任何条目 即使我知道条目
  • 相当于 Python 中的 LinkedHashMap

    链接哈希映射 http java sun com j2se 1 5 0 docs api java util LinkedHashMap html是类似 Hashtable 的数据结构 Python 中的 dict 的 Java 实现 具有
  • 如何导出当前日期和时间并附加在包含“Hello”的每行末尾

    我有以下文件party txt包含如下内容 Hello Jacky Hello Peter Bye Johnson Hello Willy Bye Johnny Hello Mary Hello Wendy 我用的是grep hello捕获
  • OSX:启动应用程序的多个实例并向它们传递命令行参数

    有一个程序我需要多次启动并每次传递不同的参数 为此 我尝试编写一个简单的 python 脚本 如下所示 import sys os from os path import join This works but will not launc
  • 是否有 java 实用程序可以生成 http 多部分响应?

    我正在构建一个返回多部分响应的网络服务 我知道构建多部分响应的格式 如果我找不到现有的工具 我将构建自己的工具 也许我只是需要有关我的 google foo 的帮助 我发现的所有内容都是关于发布或使用多部分消息 没有关于生成多部分响应的内容
  • 如何在 webview 中显示无互联网连接对话框 |安卓工作室

    我正在尝试在网络视图中添加一条消息 当您没有互联网连接时 该消息应该会出现 我尝试了很多方法 但总是犯一个我不明白的错误 我创建了一个名为 assets 的文件夹 并按照 YouTube 教程添加了一个文件 error html 但它给了我
  • PHP crypt 和 salt - 请更多说明

    我昨天在这里得到了一些非常好的答案 我把我得到的东西放在一起 我认为这将是一个相当安全的算法 我在使用带有生成盐的 for 循环的河豚时遇到问题 我使用 base64 字符和 for 循环来获取随机字符串 我想获取这个生成的字符串并将其作为
  • Rails:无法访问我的 lib 目录中的模块

    我想创建一个通用字符串操作类 可以在我的 Rails 应用程序中的模型 视图和控制器之间使用 现在 我正在尝试将模块放入我的 lib 目录中 并且我只是尝试访问 Rails 控制台中的函数来测试它 我已经尝试了很多类似问题中的技术 但我无法
  • NSDate:获取独立于设备时钟的精确时间? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在应用程序运行之间本地检测用户的 iPhone 时钟进度 https stackoverflow com questions 7122216 how can i locally detect ip