我的编程空间,编程开发者的网络收藏夹
学习永远不晚

NSSecureCoding是否真的安全

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

NSSecureCoding是否真的安全

这篇文章主要介绍“NSSecureCoding是否真的安全”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“NSSecureCoding是否真的安全”文章能帮助大家解决问题。

NSSecureCoding 可能很多人都没用过,但是 NSCoding 大家应该都不陌生;你可以简单的理解为 NSSecureCodingNSCoding 的安全版本。

在说 NSSecureCoding 之前,我们先回忆一下 NSCoding 的用法。

NSCoding的用法

@interface Person : NSObject<NSCoding>@property (nonatomic, copy) NSString *name;@end@implementation Person- (instancetype)initWithCoder:(NSCoder *)coder {    self = [super init];    if (!self) return nil;    self.name = [coder decodeObjectForKey:@"name"];    return self;}- (void)encodeWithCoder:(nonnull NSCoder *)coder {    [coder encodeObject:self.name forKey:@"name"];}@end

第1步遵守 NSCoding 协议,第2步实现协议内的 initWithCoder:encodeWithCoder: 这2个方法。

使用代码如下:

Person *per = [[Person alloc] init];per.name = @"name1";NSData *archiver = [NSKeyedArchiver archivedDataWithRootObject:per];Person *per2 = [NSKeyedUnarchiver unarchiveObjectWithData:archiver];

利用 NSKeyedArchiver 的 archivedDataWithRootObject: 类方法进行归档,使用 NSKeyedUnarchiver 的 unarchiveObjectWithData: 类方法进行解档。

是不是很简单,我们再来看看 NSSecureCoding 的用法。

NSSecureCoding的用法

@interface Person : NSObject<NSSecureCoding>@property (nonatomic, copy) NSString *name;@end@implementation Person- (instancetype)initWithCoder:(NSCoder *)coder {    self = [super init];    if (!self) return nil;    self.name = [coder decodeObjectOfClass:NSString.class forKey:@"name"];    return self;}- (void)encodeWithCoder:(nonnull NSCoder *)coder {    [coder encodeObject:self.name forKey:@"name"];}+ (BOOL)supportsSecureCoding {    return YES;}@end

除了把协议名从 NSCoding 换成了 NSSecureCoding,主要增加了一个类方法 supportsSecureCoding(如果你遵守了NSSecureCoding协议的话,那么这个方法必须返回YES),还有解档方法从 decodeObjectForKey: 换成了 decodeObjectOfClass:forKey:

使用代码如下:

Person *per = [[Person alloc] init];per.name = @"name1";NSData *archiver = [NSKeyedArchiver archivedDataWithRootObject:per requiringSecureCoding:YES error:nil];Person *per2 = [NSKeyedUnarchiver unarchivedObjectOfClass:Person.class fromData:archiver error:nil];

归档方法由 archivedDataWithRootObject: 改成了 archivedDataWithRootObject:requiringSecureCoding:error:,解档方法由 unarchiveObjectWithData: 改成了 unarchivedObjectOfClass:fromData:error:

从整体上来看 NSSecureCodingNSCoding 其实就多了1个Class类型的参数,安全性也体现在这个参数上。

你可以从这篇文档上获得 NSSecureCoding 的详细描述:developer.apple.com/documentati… 。

简单总结一下就是在使用 NSCoding 协议时,你需要先解码然后才能判断类型是否正确,代码如下:

id obj = [decoder decodeObjectForKey:@"myKey"];if (![obj isKindOfClass:[MyClass class]]) {  }

这样做有很多缺点,首先你在验证类型的时候,这个对象已经构造完成了,如果这是一个集合类的话,那么这个对象可能已经插入到集合中了,如果类型不准确可能还需要移除;这样效率会很低。

NSSecureCoding 的做法就是把 Class 作为参数传递进去,Apple会在解码前验证类型是否一致。

看起来 NSSecureCoding 确实比 NSCoding 更安全了,但是它却有一个致命的缺点。

NSSecureCoding的致命缺点

我们把数据存储到本地的时候,自然也希望下次读取的是上次我们存储的值,而不是一个被修改过的值,我在测试 NSSecureCoding 的时候,发现归档文件居然能被篡改,而且程序还能正常读取到被篡改后的值而没有任何异常,当然,这个问题 NSCoding 同样也有。

具体过程如下:

NSData *archiver = [NSKeyedArchiver archivedDataWithRootObject:per requiringSecureCoding:YES error:nil];[archiver writeToFile:@"/archiver" atomically:YES];

第一步将归档数据保存到本地。

这是我保存到本地后的文件 archiver,正常情况下确实不管用什么软件要么打开失败要么乱码,但是如果你把文件后缀改为 .plist 的话,然后用Xcode打开就能看到文件的大致信息,具体包含类名、父类、属性名以及属性值,如下图所示:

NSSecureCoding是否真的安全

掌握了类名、属性名之后,攻击者只需要模仿它创建1个和它同名的类,然后随意修改属性值,保存为归档文件后替换APP路径下的归档文件,就可以达到修改APP内数据的目的。

我在本地测试了一下,确实可以用这种方式修改APP内部数据。

关于“NSSecureCoding是否真的安全”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

NSSecureCoding是否真的安全

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

NSSecureCoding是否真的安全

这篇文章主要介绍“NSSecureCoding是否真的安全”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“NSSecureCoding是否真的安全”文章能帮助大家解决问题。NSSecureCoding
2023-07-05

一文详解NSSecureCoding真的安全吗

这篇文章主要为大家介绍了NSSecureCoding安全深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-14

代码里的ThreadLocalRandom是否安全

这篇文章主要介绍“代码里的ThreadLocalRandom是否安全”,在日常操作中,相信很多人在代码里的ThreadLocalRandom是否安全问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”代码里的Thr
2023-06-15

阿里云代理安全吗是真的吗

首先,阿里云提供了全面的安全措施来保护客户的数据和系统。这些措施包括但不限于:数据加密:阿里云为用户提供了数据加密功能,用户可以在云端轻松地保护数据安全。访问控制:阿里云采用了分层访问控制策略,根据用户角色的权限控制用户对资源的访问权限。数据备份:阿里云提供了数据备份服务,用户可以定期备份数据,以确保数据的安全性。灾备
阿里云代理安全吗是真的吗
2023-10-28

MySQL BIT_LENGTH() 函数是否是多字节安全的?

Just like LENGTH() function, MySQL BIT_LENGTH() function is not a multi-byte safe function. As we know that the differen
2023-10-22

谷歌是否真的放弃了Golang?

谷歌是否真的放弃了Golang?随着互联网技术的快速发展,不同的编程语言也呈现出不同的发展趋势。Golang作为一种较为新兴的编程语言,自问世以来受到了不少开发者的青睐。作为一家全球知名的科技巨头,谷歌在很多项目中也广泛应用了Golang
谷歌是否真的放弃了Golang?
2024-02-29

免费云服务器360安全吗是真的吗

在当今互联网时代,免费的云服务器成为了一种常见的选择,但是,我们应该关注一个事实:云服务器是虚拟的,它们的安全性很难被保障。尽管一些云服务商声称提供了高级的安全防护措施,但是这些措施并不能完全阻止黑客和病毒的入侵。首先,免费的云服务器很难被攻破。云服务商的安全措施通常是由专业的安全团队来管理和维护的,他们会定期检查云服
免费云服务器360安全吗是真的吗
2023-10-28

多开阿里云服务器是否安全?是否会封号?

在云计算时代,越来越多的企业和个人开始使用云服务器来满足其业务需求。阿里云作为国内领先的云计算服务提供商,其服务器备受青睐。然而,随着技术的发展,一些用户可能会考虑通过多开阿里云服务器来获取更多的资源。本文将探讨多开阿里云服务器是否安全,并分析其是否可能导致封号的情况。1.多开阿里云服务器的定义首先,我们需要明确
多开阿里云服务器是否安全?是否会封号?
2024-01-16

云服务器存文件是否安全

云服务器存储文件的安全性取决于多个因素。以下是一些影响云服务器文件安全的因素:1. 数据加密:确保云服务器上文件的加密可以保护数据的机密性,即使数据被盗取也无法读取。2. 访问控制:云服务器应该提供访问控制机制,以确保只有经过授权的用户才能
2023-09-22

亚马逊服务器走的是cn2吗是真的吗安全吗

亚马逊服务器在中国大陆地区使用的是中国电信的CN2网络,这是一种高速、低延迟的网络,可以提供更好的网络连接质量和更快的数据传输速度。但是,网络安全问题不仅仅取决于网络类型,还取决于服务器的配置和管理。亚马逊作为一家全球知名的云计算服务提供商,一直致力于保护客户数据的安全和隐私。他们采用了多种安全措施,包括数据加密、访问控制、网络隔离等,以确保客户数据的安全。此外,亚马逊还定期进行安全审计和漏洞扫描,...
2023-10-27

云服务器存文件是否安全

云服务器文件存储安全性:优点:冗余备份端到端加密物理安全法规遵从性灾难恢复缺点:共享基础设施网络安全威胁监管问题内部威胁停机时间安全措施:强密码和多因素认证访问控制定期修补文件监控数据备份安全配置
云服务器存文件是否安全
2024-04-13

阿里云代理返利是真的吗吗安全吗

近年来,阿里云作为国内云计算市场的领头羊,凭借其优质的服务和稳定的性能,赢得了越来越多用户的信任和支持。那么,阿里云代理返利是否真的存在呢?首先,我们要了解一下阿里云代理的优势。阿里云代理的优势在于:低成本。与阿里云官网购买相比,代理可以享受更低的价格,同时还有更多的返利政策和优惠活动。灵活。阿里云拥有更多的产品线和解
2023-10-27

亚马逊云服务器的安全吗是真的吗吗

1.亚马逊云服务器的安全性亚马逊云服务器(AmazonWebServices,简称AWS)是目前全球最大的云计算服务提供商之一,其安全性备受关注。AWS提供了多种安全措施来保护其客户的数据和应用程序,包括:1.1访问控制AWS提供了多种访问控制机制,包括身份验证、授权和审计。AWSIdentityandAccessManagement(IAM)可以帮助用户管理对AWS资源的访问权限,包括用户、组和角色。此外,AWS还提供了多种身份验证机制,...
2023-10-27

SSL证书是否能够完全保证网站的安全性

SSL证书能够加密网站与用户之间的通信,确保数据传输的安全性。它可以防止中间人攻击和窥探数据的行为。然而,SSL证书并不能完全保证网站的安全性。网站的安全性还取决于网站本身的安全措施,如防火墙、漏洞修复、安全编码等。因此,SSL证书只是网站
SSL证书是否能够完全保证网站的安全性
2024-04-17

京东云服务器购买安全吗是真的吗

1.京东云服务器购买安全性京东云是一家知名的云计算服务提供商,其服务器购买安全性是值得信赖的。京东云提供的服务器产品都经过了严格的安全测试和审核,确保其安全性和稳定性。此外,京东云还提供了多种安全措施,如DDoS攻击防护、防火墙、安全组等,以保障用户的数据安全。2.京东云服务器购买流程购买京东云服务器非常简单,用户只需在京东云官网注册账号,选择所需的服务器配置和地域,完成支付即可。京东云还
2023-10-26

亚马逊云服务器的安全吗是真的吗还是假的

1.亚马逊云服务器的安全性亚马逊云服务器(AmazonWebServices,AWS)是全球最大的云计算服务提供商之一,其安全性备受关注。AWS采用了多种安全措施来保护其客户的数据和应用程序,包括物理安全、网络安全、身份验证和访问控制等方面。2.物理安全AWS的数据中心采用了多层物理安全措施,包括视频监控、入侵检测、门禁控制和安全围栏等。AWS还定期进行安全审计和认证,以确保其数据中心符合全球各地的安全标准和法规。...
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录