如何验证 NSConnection 请求?
How to authenticate NSConnection requests?
(让我们忽略 NSConnection
现在已被弃用的事实。)
我有一个工具可以通过服务端口接受到 NSConnection 的连接。我有一个启动该工具然后连接到它的应用程序。那部分有效。
现在,我想确保只有我的特定应用可以与该工具通信,并且该工具拒绝来自任何其他应用的连接 tool/app。
如何最好地完成此任务?
我的一个想法:
由于应用程序启动了该工具,它可以将 "secret" 作为参数传递给该工具,然后每当我将其函数之一作为 NSDistributedObject 调用时,我将相同的秘密传递给该工具。但是,这意味着我必须将那个额外的参数传递给我进行的每个调用,我认为这是不必要的开销。
我认为我可以在应用程序打开与工具的连接时接受或拒绝连接,即只有一次。有 NSConnectionDelegate
,我怀疑我必须在其 authenticateComponents:withData:
处理程序中实施身份验证检查,但我找不到任何示例来解释如何执行此操作。我的意思是,该连接尝试中是否有任何数据可以识别请求连接的应用程序,例如它的 PID?
您每次通话都建立连接吗?我不这么认为,但如果不是,你为什么认为每次通话都必须传递秘密?服务器有客户端必须调用的 check-in 方法是很常见的。您可以在 check-in 方法中验证秘密。
恶意客户端可能会尝试跳过 check-in 方法。你可以使用NSConnectionDelegate
的-connection:handleRequest:
方法强制他们调用check-in方法。为每个连接保留一个标志,指示您是否看到了 check-in 方法。如果你有,那个方法可以returnNO
。如果还没有,请检查 NSDistantObjectRequest
的 invocation
的 selector
。如果是 check-in 方法,请设置标志和 return NO
。如果不是,则终止连接。
我知道底层端口(Mach 或套接字)具有验证对等点的机制,但我看不到通过 NSConnection
的抽象来实现这一点的方法。
最后,您显然已与 NSConnection
结婚,但这正是 NSXPCConnection
API 的用途。除其他事项外,它将确保该服务仅对父应用程序可见。
(让我们忽略 NSConnection
现在已被弃用的事实。)
我有一个工具可以通过服务端口接受到 NSConnection 的连接。我有一个启动该工具然后连接到它的应用程序。那部分有效。
现在,我想确保只有我的特定应用可以与该工具通信,并且该工具拒绝来自任何其他应用的连接 tool/app。
如何最好地完成此任务?
我的一个想法:
由于应用程序启动了该工具,它可以将 "secret" 作为参数传递给该工具,然后每当我将其函数之一作为 NSDistributedObject 调用时,我将相同的秘密传递给该工具。但是,这意味着我必须将那个额外的参数传递给我进行的每个调用,我认为这是不必要的开销。
我认为我可以在应用程序打开与工具的连接时接受或拒绝连接,即只有一次。有 NSConnectionDelegate
,我怀疑我必须在其 authenticateComponents:withData:
处理程序中实施身份验证检查,但我找不到任何示例来解释如何执行此操作。我的意思是,该连接尝试中是否有任何数据可以识别请求连接的应用程序,例如它的 PID?
您每次通话都建立连接吗?我不这么认为,但如果不是,你为什么认为每次通话都必须传递秘密?服务器有客户端必须调用的 check-in 方法是很常见的。您可以在 check-in 方法中验证秘密。
恶意客户端可能会尝试跳过 check-in 方法。你可以使用NSConnectionDelegate
的-connection:handleRequest:
方法强制他们调用check-in方法。为每个连接保留一个标志,指示您是否看到了 check-in 方法。如果你有,那个方法可以returnNO
。如果还没有,请检查 NSDistantObjectRequest
的 invocation
的 selector
。如果是 check-in 方法,请设置标志和 return NO
。如果不是,则终止连接。
我知道底层端口(Mach 或套接字)具有验证对等点的机制,但我看不到通过 NSConnection
的抽象来实现这一点的方法。
最后,您显然已与 NSConnection
结婚,但这正是 NSXPCConnection
API 的用途。除其他事项外,它将确保该服务仅对父应用程序可见。