首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止NSURLProtocol实现读取URL

防止NSURLProtocol实现读取URL
EN

Stack Overflow用户
提问于 2016-01-11 12:30:37
回答 2查看 98关注 0票数 0

我们开发了一个iOS框架,将其分发给其他开发人员,以便在他们的应用程序中使用,并利用我们提供的一些服务。它非常有效(在体外)。但是,由于URL加载系统在iOS中的工作方式,使用几行代码,我们所有的URLs都将在每个开发人员的肉眼中可见,包括我们所珍视的所有HTTPS urls。

我知道匿名安全性从来不是一个好主意( HTTPS总是透明的外部客户端的普遍错误信念的阴影),但我仍然有这样的要求,以某种方式使我们的URL在实现开发人员中不可见。

到目前为止,我已经考虑过为我们的框架实现一个简单的NSURLConnection替代方案,但是考虑到HTTPS的需求,这似乎是一项艰巨的任务。

无论如何,我们是否可以阻止NSURLProtocol注册更多的类或任何其他选项?

下面是一些关于NSURLProtocol如何破坏您的安全性的示例代码:

代码语言:javascript
复制
 class NetSniffer : NSURLProtocol {

  override class func canInitWithRequest(request: NSURLRequest) -> Bool {
    print("\(request.URL?.absoluteURL)")
    return false
  }


}

在你的application(_, didFinishLaunchingWithOptions:)-> Bool中:

代码语言:javascript
复制
NSURLProtocol.registerClass(NetSniffer)

P.S.:我能清楚地记得有一次我试图更改一些与AVPlayer相关的url连接的结果,以创建一个自定义的DRM,并且遇到了一些不寻常的事实,即没有一个数据连接是由NSURLProtocol触发的!会是线索吗?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-13 04:39:15

好吧,我又一次对我自己的问题有了答案。解决办法其实很简单。幸运的是,NSURLSession提供的比我想象的更多。注册为NSURLProtocol的每个类都只影响defaultSession,如果您要创建一个新会话,则根据默认配置(而不是向其他开发人员公开I)创建一个新会话是安全的。但是,无论如何,我所做的是:

  • 使用类的静态成员(如NSURLSessionConfiguration )获取defaultConfiguration的实例
  • 迭代其注册协议(registeredProtocols)并逐个取消注册。
  • 基于此配置实例化一个新的NSURLSession
  • 在新创建的会话上启动一个新的数据任务
  • 结束后释放会话。

到目前为止,我还没有找到解决这个问题的方法,并从我的模块外部提取URL。

如果需要改进,请告诉我。

票数 0
EN

Stack Overflow用户

发布于 2016-01-11 13:27:27

如果阻止NSURLProtocol.registerClass,就会破坏许多有用的代码。

试图隐藏您的URL是徒劳的练习。如果有人想反向工程你的API,他们会这样做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34721631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档