NSAppTransportSecurityをinfo.plistファイルに追加するにはどうすればよいですか?


124

https://developer.apple.com/videos/wwdc/2015/?id=711 @ 5:55

これを自分のinfo.plistに追加できないようです。それは価値がありません。XCodeバージョン7.0ベータ(7A121l)を実行していて、iOS9でテストしています。

ビデオに表示されているように希望のURLを具体的に宣言できないため、「App Transport SecurityはクリアテキストのHTTP(http://)リソースのロードを安全ではないためブロックしました。一時的な例外は、アプリのInfo.plistファイル」エラー。

しかし、私はそれを構成することができないようです。何か案は?


もう質問はありません。先に進んで自分の質問に答え、適切な時間遅延の後に受け入れてください。
ノーマンH

ドメイン名とは?これはサーバーのベースURLですか、それとも他のURLですか?アプリのドメイン名はどこにありますか?
Nik

ドメイン名は、最も一般的に使用される用語の1つです。まあこれは購入したもので、ホスティングした後、APIに使用するサーバーのベースURLとして使用できます。アプリのドメイン名に勝るものはありません。そのため、APIが記述されているドメイン名としてドメイン名を使用できます。
アシッシュ2015

回答:


131

これで試してください--- Xcode-beta 4 7.0で私のために働きました

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <!--Include to allow subdomains-->
            <key>NSIncludesSubdomains</key>
            <true/>
            <!--Include to allow HTTP requests-->
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <!--Include to specify minimum TLS version-->
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>

また、ATSを無効にしたい場合は、これを使用できます。

<key>NSAppTransportSecurity</key>  
 <dict>  
      <key>NSAllowsArbitraryLoads</key><true/>  
 </dict>

しかし、これはまったくお勧めできません。サーバーにはSSL証明書が必要であり、プライバシーの漏洩は発生しません。


XCode 7.2(7C68)を使用していて、テストプロジェクトのinfo.plistを(ATSを完全に無効にすることによって)変更しました。しかし、それは機能していません。どんな手掛かり?
Sanandrea 2016年

一般的にそれは動作します...あなたのコードをここに貼り付けると、私たちは見ることができます
Ashish

また、ドマニスが2つ以上ある場合は追加する必要があります。<key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> それ以外の場合、リリースバージョンでは何らかの理由で機能しませんでした
P.Lorand

90

info.plistファイルのNSAppTransportSecurity辞書のYESにNSAllowsArbitraryLoadsキーだけを追加する必要があります。

例えば、

 <key>NSAppTransportSecurity</key>
 <dict>
      <key>NSAllowsArbitraryLoads</key>
     <true/>
 </dict>

ここに画像の説明を入力してください


1
これは回避策です。実際の問題は、@ Ashishの回答での死です
judepereira

45

それは私にとってはうまくいかなかったが、これはうまくいった:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  

<true/>代わりにあなたがそう思うと思います<YES/>
クリフトンラブラム

1
セキュリティの観点からは、これはまさに方法であり、それを行わない方法です。これは、誰もこのコードセクションを確認して、適切に指定されたドメインに更新しないためです。
igraczech

1
これは良い習慣ではありません。むしろ、特定のドメインを許可する必要があります。
アシッシュ2016

1
私のような他の初心者のために:既存で囲まれ、最後に(正しい位置でこれを入れていることを確認してください</dict></plist>タグ:
PWDR

21

明確にするために...あなたは常にhttpSを使うべきです

しかし、例外を追加してそれをバイパスすることができます:

ここに画像の説明を入力してください



4

回答を更新(wwdc 2016以降):

IOS apps will require secure HTTPS connections by the end of 2016

App Transport Security(ATS)は、AppleがiOS 9で導入した機能です。ATSを有効にすると、アプリは非セキュアHTTPではなくHTTPS接続を介してWebサービスに強制的に接続されます。

ただし、上記の回答で述べたように、開発者はATSをオフにして、アプリがHTTP接続経由でデータを送信することを許可できます。2016年末に、AppleはアプリをApp Storeに送信することを希望するすべての開発者にATSを必須にします。リンク


今年の終わり以降、httpsを使用しない新しいアプリまたは更新アプリは拒否されます。バイパス付きの既存のアプリはどうですか?(強制更新が必要ですか?)
Paraneetharan Saravanaperumal

2
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>org</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

これにより、.com .net .orgに接続できます


複数のドメインを追加する方法を示す例をありがとう。
AtheistP3ace 2016年

2
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

1

ParaSaraの回答についてもう少し説明すると、App Transportのセキュリティ必須になり、それをオフにしようとすると、アプリが拒否される場合があります。

開発者は、ネットワークコードが機能しない場合や、問題を修正する前に他の開発を継続したい場合に、App Transportのセキュリティをオフにすることができます。5人のチームで言うと、1人がすべての問題を修正している間、4人は他の作業を続けることができます。ネットワークに問題があり、App Transportのセキュリティが原因であるかどうかを確認したい場合は、デバッグツールとしてApp Transportのセキュリティをオフにすることもできます。あなたが知ったらすぐに、すぐに再びそれをオンにする必要があります。

将来使用する必要がある解決策は、httpsをサポートしていないサードパーティのサーバーを使用しない限り、httpをまったく使用しないことです。自分のサーバーがhttpsをサポートしていない場合、Appleはそれに問題があります。サードパーティのサーバーがあったとしても、Appleがそれを受け入れるとは思えません。

サーバーセキュリティのさまざまなチェックと同じです。ある時点で、Appleは正当な例外のみを受け入れるようになります。

しかし、ほとんどの場合、これを考慮してください。あなたは顧客のプライバシーを危険にさらしています。私の本では、それは大きな問題です。しないでください。コードを修正し、安全でないコードを実行する許可を求めないでください。



1

Macシェルコマンドラインで、次のコマンドを使用します。

plutil -insert NSAppTransportSecurity -xml "<array><string> hidden </string></array>" [location of your xcode project]/Info.plist 

このコマンドは、必要なすべての値をplistファイルに追加します。



0

Xcode 9.2、Swift 4、これは私にとってはうまくいきます。

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.