关于iOS HTML安全的简单策略–下卷

本文探讨了iOS应用中本地HTML的安全策略,利用NSURLProtocol拦截网络请求,动态解密JS文件,保护本地数据安全。通过创建NSURLProtocol子类,拦截WKWebView的请求,并展示了一个拦截百度的示例。
摘要由CSDN通过智能技术生成

关于iOS HTML安全的简单策略–下卷

时隔三年,终于要写下卷了,其实这个方法早就想好的了,但貌似大家不是很喜欢关注本地HTML安全的问题,主要是跨平台的手段太多了HTML不是一个优秀的“解”。

上卷说到加密的HTML放置于本地,等到App运行的时候才去解密。我们预期最终的一个方案就是用到的时候,没有用到时候就保持一个原有的加密状态。这是预期效果,思路就是获取相应的js的一个加载路径,动态去解码js文件。

1.可行性分析

1.1.NSURLProtocol

动态去加载JS的关键就是NSURLProtocol,这是个什么东西呢?简单来说一个网络层的处理代理,里面有几个关键的方法,网上相关的文章也有很多,这里就不做详细的讲解了,关于一些循环的问题,可以参考

/**
 * 关键方法,防止循环调用,
 * 但理论上我们只是使用本地的flie没有发起网络请求,
 * 应该不会存在这个问题。,算是一个拓展了解。
 * 这顺带提一下
 */
[NSURLProtocol propertyForKey:@"xxxxxx" inRequest:request]

的用法。

NSURLProtocol的作用.png

// 有三个类方法,两个对象方,这五个方法需要依次实现。
// 这里是判断如何是否需要处理我们的一个网络请求
//在我们这个需求里面,可以看作是否要拦截我们的请求

+ (BOOL)canInitWithRequest:(NSURLRequest *)request;

// 拦截下来的NSURLRequest收否需要额外的处理,这里是用于做重定向的
+ (NSURLRequest *) canonicalRequestForRequest:(NSURLRequest *)request;

// 这里是判断是否与缓存是同一个请求,如果是就使用缓存,如果不是,就重新请求。
+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b;

// 开始处理请求
// 成功拦截了请求
// 系统将自动初始化一个你注册出来的NSURLProtocol子类出来处理请求。
- (void)startLoading;

// 请求结束了,这里不管是正常结束还是出错都会走这方法。
- (void)stopLoading;

看完了NSURLProtocol的关键方法,我们来看看关键属性:

/**
 * client是一个代理对象,这里由网络请求的底层去管理,
 * 会自动给NSURLProtocol赋值。这里无需去探究client具体是什么
 * 对象
 */
@property (nullable, readonly, retain) id <NSURLProtocolClient> client;

/**
 * 关于NSURLProtocolClient关键代理,
 * 这里的方法系统已经实现了,
 * 只需要开发者在适当的时机调用就好了
 */
/*!
 * 这里是重定向,很大程度上是返回一个新的Response
 */
- (void)URLProtocol:(NSURLProtocol *)protocol wasRedirectedToRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;

/*!
 * 去查找一个缓存的Response
 */
- (void)URLProtocol:(NSURLProtocol *)protocol cachedResponseIsValid:(NSCachedURLResponse *)cachedResponse;

/*!
 * 返回一个已经实现的response,并添加缓存
 */
- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveResponse:(NSURLResponse *)response cacheStoragePolicy:(NSURLCacheStoragePolicy)p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值