1549

info.plist次のエラー メッセージに従って HTTP モードを有効にするには、どのような設定を行う必要がありますか?

安全でないため、トランスポート セキュリティはクリアテキスト HTTP (http://) リソースのロードをブロックしました。一時的な例外は、アプリの Info.plist ファイルを介して構成できます。

Xcode

私のドメインがexample.com.

4

29 に答える 29

982

NSAppTransportSecurity を使用します。

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

info.plist ファイルのNSAppTransportSecurityディクショナリでNSallowArbitraryLoadsキーをYESに設定する必要があります。

plist 構成

于 2015-08-04T10:42:04.493 に答える
583

Xcode 8.0+ および Swift 2.2+ または Objective C を使用している場合:

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

任意のサイトへの HTTP 接続を許可する場合は、次のキーを使用できます。

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

追加するために接続するドメインがわかっている場合:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
于 2016-10-28T07:06:57.187 に答える
149

これは、これを plist に追加するための簡単な回避策です (ただし、推奨されません)。

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

つまり(Appleのドキュメントによると):

NSallowArbitraryLoads
NSExceptionDomains ディクショナリにリストされていないドメインの App Transport Security を無効にするために使用されるブール値。リストされたドメインは、そのドメインに指定された設定を使用します。

NO のデフォルト値では、すべての接続に対してデフォルトの App Transport Security 動作が必要です。

私は本当にリンクをお勧めします:

理由とすべての意味を理解するのに役立ちます。

以下の XML (ファイル Info.plist 内) は次のようになります。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

すべてのページに対して任意の呼び出しを禁止しますがPAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE、接続で HTTP プロトコルを使用することを許可します。

上記の XML に以下を追加できます。

<key>NSIncludesSubdomains</key>
<true/>

指定したアドレスのサブドメインに対して安全でない接続を許可する場合。

最善の方法は、すべての任意の読み込みをブロックし (false に設定)、例外を追加して、問題がないことがわかっているアドレスのみを許可することです。

興味のある読者へ

2018 アップデート:

Apple はこれをオフにすることを推奨していません - 詳細については、207 セッション WWDC 2018を参照してください。

歴史的な理由と開発段階で元の答えを残す

于 2015-09-01T12:10:08.147 に答える
119

修正方法に加えて、なぜこれが起こっているのかについてより多くのコンテキストが必要な場合は、以下をお読みください.

iOS 9 の導入により、アプリと Web サービス間の接続のセキュリティを向上させるために、アプリとその Web サービス間の安全な接続はベスト プラクティスに従う必要があります。ベスト プラクティスの動作は、App Transport Securityによって次のように適用されます。

  • 偶発的な開示を防止し、
  • 安全なデフォルトの動作を提供します。

App Transport Security Technoteで説明されているように、Web サービスと通信する場合、App Transport Security には次の要件と動作があります。

  • サーバーは少なくとも Transport Layer Security (TLS) プロトコル バージョン 1.2 をサポートしている必要があります。
  • 接続暗号は、前方秘匿性を提供するものに限定されます (以下の暗号のリストを参照してください)。
  • 証明書は、2048 ビット以上の RSA キーまたは 256 ビット以上の楕円曲線 (ECC) キーを使用して、SHA256 以上の署名ハッシュ アルゴリズムを使用して署名する必要があります。
  • 証明書が無効な場合、ハード エラーが発生し、接続できなくなります。

つまり、Web サービス要求は、a.) HTTPSを使用し、b.) TLS v1.2 と前方秘匿性を使用して暗号化する必要があります。

ただし、他の投稿で述べたように、アプリの で安全でないドメインを指定することにより、App Transport Security からこの新しい動作をオーバーライドできますInfo.plist


NSAppTransportSecurityオーバーライドするには、 >NSExceptionDomains辞書のプロパティをに追加する必要がありますInfo.plistNSExceptionDomains次に、Web サービスのドメインをディクショナリに追加します。

たとえば、ホストwww.yourwebservicehost.com上の Web サービスに対して App Transport Security の動作をバイパスする場合は、次のようにします。

  1. Xcode でアプリを開きます。

  2. Project Navigator でファイルを見つけてInfo.plist右クリックし、[ Open As ] > [ Source Code ] メニュー オプションを選択します。プロパティ リスト ファイルが右側のペインに表示されます。

  3. 次のプロパティ ブロックをメインのプロパティ ディクショナリ内 (最初の の下<dict>) に配置します。


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

追加のドメインに例外を提供する必要がある場合は、下に別のディクショナリ プロパティを追加しますNSExceptionDomains

上記のキーの詳細については、既に言及されているこの技術情報をお読みください。

于 2015-09-21T17:56:42.057 に答える
28

アップル ドキュメント 1

アップル ドキュメント 2

これには 2 つの解決策があります。

ソリューション 1 :

  1. ファイルにキー ' ' のInfo.plist辞書を追加しますNSAppTransportSecurity
  2. キーを持つディクショナリ内に別の要素を追加します'Allow Arbitrary Loads'

Plist下の画像のように構造が表示されます。

解決策 1

解決策 2 :

  1. ファイルにキー ' ' のInfo.plist辞書を追加しますNSAppTransportSecurity
  2. NSExceptionDomainsキー ' 'を持つ辞書内に別の要素を追加します
  3. 'MyDomainName.com'タイプ NSDictionary のキーを持つ要素を追加します
  4. NSIncludesSubdomainsタイプのキー ' 'Booleanと値が として設定された要素を追加しますYES
  5. NSTemporaryExceptionAllowsInsecureHTTPLoadsタイプのキー ' 'Booleanと値が として設定された要素を追加しますYES

Plist下の画像のように構造が表示されます。

解決策 2

ソリューション 2 は、選択したドメインのみを許可するため、ソリューション 1 は安全でない HTTP 接続をすべて許可するため、推奨されます。

于 2016-03-10T11:29:32.583 に答える
20

トランスポート セキュリティは、iOS 9.0 以降で使用できます。アプリケーション内で WS を呼び出そうとすると、次の警告が表示される場合があります。

アプリケーション トランスポート セキュリティは、セキュリティで保護されていないため、平文の HTTP (http://) リソースの読み込みをブロックしました。一時的な例外は、アプリの Info.plist ファイルを介して構成できます。

Info.plist に以下を追加すると、ATS が無効になります。

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
于 2015-09-18T17:36:54.367 に答える
15

Apple によると、通常、ATS を無効にすると、正当な理由がない限り、アプリが拒否されます。その場合でも、安全にアクセスできるドメインの例外を追加する必要があります。

Apple には、使用する設定を正確に指示する優れたツールがあります。ターミナルで、次のように入力します。

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

nscurl は、このリクエストが失敗したかどうかを確認し、さまざまな設定を試して、どれが成功し、何をすべきかを正確に伝えます。たとえば、私がアクセスしたサードパーティの URL について、このコマンドは、この辞書が合格することを教えてくれました。

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

独自のサイトと制御できないサードパーティのサイトを区別するには、たとえば、キー NSThirdPartyExceptionRequiresForwardSecrecy を使用します。

于 2016-04-17T23:54:11.823 に答える
15

開発例

これは、ATS をそのまま (=セキュア) に保ちながら、HTTPS ではなく HTTP経由でlocalhostへの接続を確立できるようにする plist のスクリーンショットです。Xcode 7.1.1 で動作します。

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

于 2015-11-30T08:49:43.147 に答える
10

注: plist の例外ドメインは小文字にする必要があります。

例: [設定] -> [共有] でマシンに「MyAwesomeMacbook」という名前を付けました。サーバー (テスト用) は MyAwesomeMacbook.local:3000 で実行されており、アプリはhttp://MyAwesomeMacbook.local:3000/filesにリクエストを送信する必要があります。 local" を例外ドメインとして指定します。

--

あなたの info.plist には...が含まれます

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>
于 2016-09-12T18:17:38.890 に答える
9

使用する:

よりよく理解するための PList スクリーンショット

タイプDictionaryの plist ファイルに新しい項目NSAppTransportSecurityを追加し、タイプBooleanのディクショナリにサブ項目NSallowArbitraryLoadsを追加し、ブール値YESを設定します。これは私にとってはうまくいきます。

于 2015-09-21T09:11:24.007 に答える
6

そこへの行き方について言及する価値があるかもしれません...

Info.plist は、Main.storyboard または viewController.swift の下にあるファイルの 1 つです。

最初にクリックすると、通常は表形式になっているので、ファイルを右クリックしてソースコードとして「開く」し、最後に以下のコードを追加します。

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

すぐ上のコードをコピーして貼り付けます

 "</dict>
</plist>"

これは最後にあります。

于 2015-10-25T17:18:29.893 に答える
4

WKWebView が常に白く、何もロードされない理由を見つけようとしてここに来た人のために (正確にここで説明されているように、WKWebView を迅速かつ macOS アプリで動作させるにはどうすればよいですか) :

上記のすべてのロケット科学がうまくいかない場合は、明白なことを確認してください: サンドボックスの設定

サンドボックス設定】

Swiftとcocoaは初めてですが、プログラミングの経験はかなりあるので、このソリューションを見つけるのに約20時間を費やしました. 何十もの流行に敏感な iOS チュートリアルやアップルの基調講演のどれも、この小さなチェックボックスについて言及しているものはありません。

于 2017-10-09T10:44:59.563 に答える
3

デフォルトでは、iOS は HTTPS API のみを許可します。HTTP は安全ではないため、アプリ トランスポート セキュリティを無効にする必要があります。ATS を無効にする方法は 2 つあります。

1. プロジェクト info.plist にソース コードを追加し、ルート タグに次のコードを追加します。

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

2. プロジェクト情報を使用する。

左ペインのプロジェクトでプロジェクトをクリックし、プロジェクトをターゲットとして選択し、情報タブを選択します。次の構造に辞書を追加する必要があります。

ここに画像の説明を入力

于 2019-05-24T12:02:47.363 に答える
0

Cordova の場合、ios.json に追加する場合は、次の手順を実行します。

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

そして、それは次の中にある必要があります:

"*-Info.plist": {
   "parents": {
   }
}
于 2016-03-21T12:41:01.417 に答える