【问题标题】:Not receiving any UDP data on a socket when App Sandbox is on in Cocoa app在 Cocoa 应用程序中打开 App Sandbox 时,未在套接字上接收任何 UDP 数据
【发布时间】:2016-12-30 12:34:13
【问题描述】:

我有一个用 Swift 3.0 编写的可可应用程序,它使用使用 C++/Boost 编写的框架在套接字上接收 UDP 数据。但是当在可可应用程序中打开应用程序沙盒功能时,我没有从套接字接收任何数据,我也使用它首先将数据发送到服务器。当 App Sandbox 关闭时,一切都按预期工作。 com.apple.security.network.client 和 om.apple.security.network.server 的权利设置为 YES。

我可以做些什么来让它在打开 App Sandbox 的情况下工作(这对于 Mac App Store 中的应用程序是强制性的)?

【问题讨论】:

    标签: swift sockets cocoa boost appstore-sandbox


    【解决方案1】:

    我能够使其同时启用 com.apple.security.network.client 和 com.apple.security.network.server 并且我使用的端口数远高于 1024。我们实际上遇到了防火墙和另一个后端的问题。综上所述,可可沙盒应用程序可以打开套接字并接收 UDP 数据,但您需要启用 com.apple.security.network.server。

    【讨论】:

      【解决方案2】:

      可以使用以下权利来允许 UDP/TCP 套接字连接:

      com.apple.security.network.client
      com.apple.security.network.server
      

      根据文档中 Apple 的“Elevating Privileges Safely”部分,打开原始套接字或低于 1024 (UDP/TCP) 的端口号需要提升权限。在沙盒应用中显然不允许提升权限。

      需要提升权限的情况

      无论用户是否以管理员身份登录, 程序可能必须在 为了完成一项任务。需要提升的任务示例 权限包括:

      * manipulating file permissions, ownership
      * creating, reading, updating, or deleting system and user files
      * opening privileged ports (those with port numbers less than 1024) for TCP and UDP connections
      * opening raw sockets
      * managing processes
      * reading the contents of virtual memory
      * changing system settings
      * loading kernel extensions
      

      如果您必须执行需要提升权限的任务,您必须意识到以提升的权限运行意味着如果您的程序中存在任何安全漏洞,攻击者也可以获得提升的权限,并且会然后能够执行上面列出的任何操作。

      注意:提交的申请中不允许提升权限 Mac App Store(在 iOS 中不可用)。

      【讨论】:

      • 感谢您的回答,很高兴知道这一点。但实际上我们让它在启用了服务器 com.apple.security.network.server 的情况下工作,并且防火墙和其他端服务器存在问题。所以实际上可以使用沙箱从套接字接收数据,我们使用更高的端口。我会回答我的问题关闭这个主题
      • 我的回答没有说不可能从套接字接收,但是,与协议无关的套接字显然不是。
      猜你喜欢
      • 2021-05-27
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2018-11-14
      • 2017-08-17
      • 1970-01-01
      相关资源
      最近更新 更多