web-dev-qa-db-ja.com

iOS9は、安全なページ(SSL / HTTPS)から安全でないリソースをロードしません

Https:// URLを使用して、iOS9のUIWebViewにページをロードしようとしています。読み込まれたページには、安全でないサーバーからのCSSと画像が含まれます。

例えば。ロードされたページ:https://www.example.com/スタイルシートを含むhttp =://www.example.com/style.cssおよびイメージhttp://www.example.com/image.jpg

元のページが安全でない接続(通常のhttp)を介して読み込まれた場合、すべてが機能します。すべては、HTTPSとHTTPの両方を介してiOS8でも動作します。

アプリケーションPLISTファイルでNSAppTransportSecurityNSAllowsArbitraryLoadsに設定しました:

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

ただし、HTTPS経由でページを読み込む場合、画像は読み込まれますが、CSSファイルは読み込まれません。 UIWebViewブロックのように見えますが、安全でないページから安全でないリソースをロードしています。

安全でない接続を介してCSSをロードできるようにするUIWebViewの設定はありますか?

27
UrK

これはATSとは関係ありません。 WebKitは、ホストページがhttps経由で提供されている場合、「アクティブ」コンテンツ(JS、CSSなど)の特定のクラスへのアクセスが安全でない接続を介してロードされることを禁止する混合コンテンツポリシーを適用します。

インスペクターでページを調べると、エラーパネルに報告されていることがわかります。


フォローアップ:混合コンテンツのブロックをオフにすることはできません。安全でないCSSまたはJSを許可すると、ページ全体のセキュリティが最も安全でないリソースのセキュリティに低下します。 httpでcss/jsをロードする必要がある場合の解決策は、httpでページ全体をロードすることです。これにより、ユーザーに表示されるUIはコンテンツのセキュリティを正しく反映します。

17
Oliver

Info.plistで、次のApp Transport Securityキーを追加する必要があります。

NSAppTransportSecurity                                      Dictionary
    NSAllowsArbitraryLoads                                  Boolean       YES
    NSExceptionDomains                                      Dictionary    
        **YOUR-DOMAIN-HERE**                                Dictionary
            NSExceptionAllowsInsecureHTTPLoads              Boolean       YES
            NSIncludesSubdomains                            Boolean       YES
            NSThirdPartyExceptionAllowsInsecureHTTPLoads    Boolean       YES

うまくいけば、これはあなたのために働くはずです。

12
ske57

App Transport SecurityはiOS9リリースで改訂されました。これで、アプリケーションは安全でない接続から安全になりました。また、iOSは安全な接続を強制します。あなたの場合、これは競合する可能性があります。

FromAppleドキュメント

アプリが安全でないドメインにリクエストを行う必要がある場合、アプリのInfo.plistファイルでこのドメインを指定する必要があります

したがって、これはWebページの.cssファイルのロード中に問題を引き起こす可能性があると思います。

info.plistでドメインを指定して、.cssファイルがロードされているかどうかを確認してください。

編集:


Spotlight:info.plistにさらにキーを追加する必要があります。

このキーNSThirdPartyExceptionAllowsInsecureHTTPLoadsを見ると、開発者によって制御されていないサービスドメインが許可され、安全でないリソースを渡すことでトランスポートレイヤーに例外を追加できます。

App Transport Securityのキーを追加するための構造は次のとおりです。

enter image description here

すべてのキーの詳細と説明については、このメモを確認してください- App Transport Security Technote

5
Kampai

Xcode 8.3.3(8E3004b)で

に変更されました

App Transport Security Settings> Allow Arbitrary Loads in Web Content> YES

enter image description here

0
ytbryan

以下の手順により、安全でないコンテンツをWKWebViewで開くことができます。

  1. 最初にWebコンテンツの任意のロードを許可= YESおよび任意のロードを許可= YESAppに追加しましたinfo.plistのTransport Security Settings辞書。 enter image description here
  2. 以下にwkwebviewデリゲートメソッドを追加しました。

    func webView(_ webView:WKWebView、didReceive challenge:URLAuthenticationChallenge、completionHandler:@escaping(URLSession.AuthChallengeDisposition、URLCredential?)-> Void){completionHandler(.useCredential、URLCredential(trust:challenge.protectionSpace.serverTrust!))}

    2番目のステップでは、デリゲートを次のように登録することを忘れないでください。

    オーバーライドfunc viewDidLoad(){super.viewDidLoad()self.webView.navigationDelegate = self}

0