将 localhost 添加到 App Transport Security (ATS) NSExceptionDomains 是否安全?

Is it safe to add localhost to App Transport Security (ATS) NSExceptionDomains?

localhost 添加到 ATS NSExceptionDomains 以供开发使用,在安全方面是否安全?在每次提交之前从 Info.plist 文件中删除这些行不是很方便(而且很容易忘记)。

<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

另外,Apple是否可以因此拒绝申请?

如果应用程序的生产版本不需要它,我会将您的构建配置设置为使用两个不同的 Info.plist 文件。您基本上可以将 plist 的内部版本设置为 "Internal-Info.plist" 并在其中排除本地主机。然后制作没有排除的产品 "Info.plist",让 Apple 没有理由现在或将来可能拒绝您的应用程序。

要将您的构建配置为自动拉入适合构建类型的 Info.plist:

  1. Select 左侧导航器中的项目
  2. Select 您要更改的目标(在 "TARGETS" 下)
  3. 点击"Build Settings"
  4. 搜索 "Info.plist"
  5. 在打包部分,您应该会看到一个名为 "Info.plist File" 的设置。 Select 行,然后单击小三角形将其展开,以便您可以针对不同的构建配置进行不同的设置。将 "Debug" 的值更改为 "Internal-Info.plist"

确保将 "Info.plist" 复制到一个名为 "Internal-Info.plist" 的新文件中,从 "Info.plist" 中删除排除项,然后就可以了。

Apple 现在可能会为此拒绝您(只有 Apple 知道),但从 2017 年开始,Apple 将要求任何 ATS 排除的正当理由,因此除非您有排除本地主机 ATS 要求的正当理由,否则最好现在就正确设置它。

您现在可以对本地地址执行此操作:

<key>NSAppTransportSecurity</key>    
<dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
</dict>

Apple 已将此密钥视为 ATS 例外 — 它表示不会拒绝使用它的应用程序。更多信息:https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html(在页面中搜索 "local")