首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证NSConnection请求?

如何验证NSConnection请求?
EN

Stack Overflow用户
提问于 2019-07-02 01:45:48
回答 1查看 43关注 0票数 0

(让我们忽略一个事实,即NSConnection现在已不再受欢迎。)

我有一个通过服务端口接受到NSConnection连接的工具。我有一个应用程序可以启动这个工具,然后连接到它。那部分起作用。

现在,我想确保只有我的特定应用程序才能与该工具对话,并且该工具拒绝任何其他工具/应用程序的连接。

我怎样才能最好地做到这一点?

我有一个想法:

由于应用程序启动了该工具,它可以将一个“秘密”作为参数传递给该工具,然后每当我以NSDistributedObject的形式调用它的一个函数时,我都会将相同的秘密传递给该工具。然而,这意味着我必须将这个额外的参数传递给我所打的每一个电话,我认为这是不必要的开销。

我认为,当应用程序打开与工具的连接时,我可以接受或拒绝连接,也就是只有一次。有NSConnectionDelegate,我怀疑我必须在它的authenticateComponents:withData:处理程序中实现身份验证检查,但是我找不到任何例子来解释如何做到这一点。我的意思是,在连接尝试中是否有任何数据可以识别请求连接的应用程序,例如PID?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 02:16:11

你是否为每个电话建立了一个连接?我不这么认为,但是,如果不是,你为什么要把每个电话的秘密都告诉我呢?服务器拥有客户端必须调用的签入方法是非常常见的。您可以在签入方法中验证这个秘密。

恶意客户端可能试图跳过签入方法。您可以使用-connection:handleRequest:方法NSConnectionDelegate来强制他们调用签入方法。为每个连接保留一个标志,指示是否见过签入方法。如果有,该方法可以只返回NO。如果没有,那么检查NSDistantObjectRequestinvocationselector。如果是签入方法,设置标记并返回NO。如果没有,则终止连接。

我知道底层端口(马赫或套接字)有对对等点进行身份验证的机制,但我看不出有什么方法可以通过设置NSConnection的抽象来实现这一点。

最后,显然您是NSConnection的拥护者,但这正是NSXPCConnection API的目的所在。除其他外,它将确保该服务只对父应用程序可见。

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

https://stackoverflow.com/questions/56844303

复制
相关文章

相似问题

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