it-swarm.com.de

iOS9 lädt keine unsicheren Ressourcen von einer sicheren Seite (SSL/HTTPS)

Ich versuche, eine Seite in UIWebView unter iOS9 mit https: // URL zu laden. Die geladene Seite enthält CSS und Bilder von einem unsicheren Server.

Z.B. die geladene Seite: https : //www.example.com/, die das Stylesheet http : //www.example.com/style.css und image enthält. http : //www.example.com/image.jpg

Alles funktioniert, wenn die Originalseite über eine unsichere Verbindung (normales http) geladen wird. Alles funktioniert auch auf iOS8 sowohl über HTTPS als auch über HTTP.

Ich habe NSAppTransportSecurity auf NSAllowsArbitraryLoads in der PLIST-Anwendungsdatei gesetzt:

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

Beim Laden der Seite über HTTPS werden die Bilder zwar OK geladen, CSS-Dateien jedoch nicht. Es scheint, als würde UIWebView das Laden unsicherer Ressourcen von einer sicheren Seite blockieren.

Gibt es eine Einstellung von UIWebView, mit der CSS über eine unsichere Verbindung geladen werden kann?

26
UrK

Dies hat nichts mit ATS zu tun. WebKit setzt eine Richtlinie für gemischte Inhalte durch, durch die der Zugriff auf bestimmte Klassen "aktiver" Inhalte (JS, CSS usw.) nicht über eine unsichere Verbindung geladen wird, wenn die Host-Seite über https bereitgestellt wird.

Wenn Sie Ihre Seite im Inspektor untersuchen, wird dies im Fehlerbereich angezeigt.


Follow-up: Sie können das Blockieren gemischter Inhalte nicht deaktivieren. Wenn Sie unsicheres CSS oder JS zulassen, wird die Sicherheit der gesamten Seite auf die der am wenigsten sicheren Ressource reduziert. Wenn Sie css/js über http laden müssen, können Sie die gesamte Seite über http laden. Auf diese Weise spiegelt die Benutzeroberfläche die Sicherheit des Inhalts korrekt wider.

17
Oliver

In Ihrer info.plist müssen Sie die folgenden App Transport Security-Schlüssel hinzufügen:

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

Hoffentlich sollte das für Sie funktionieren.

12
ske57

App Transport Security überarbeitet in iOS9. Jetzt ist Ihre Anwendung vor einer unsicheren Verbindung geschützt. Und iOS zwingt zur sicheren Verbindung. Dies kann in Ihrem Fall ein Konflikt sein.

Aus Apple-Dokumentation 

Wenn Ihre App eine Anforderung an eine unsichere Domäne stellen muss, müssen Sie diese Domäne in der Info.plist-Datei Ihrer App angeben

Ich denke, das kann zu Problemen beim Laden der .css-Datei für Webseiten führen.

Versuchen Sie also, Ihre Domäne in info.plist anzugeben, und prüfen Sie, ob .css-Dateien geladen sind oder nicht.

Bearbeiten:


Spotlight: Hier müssen Sie weitere Schlüssel in info.plist hinzufügen. 

Sehen Sie sich diesen Schlüssel an NSThirdPartyExceptionAllowsInsecureHTTPLoads. Dies ermöglicht eine Dienstdomäne, die nicht vom Entwickler gesteuert wird, und fügen Sie der Transportebene eine Ausnahme hinzu, um unsichere Ressourcen zu umgehen.

Die Struktur zum Hinzufügen von Schlüsseln für App Transport Security befindet sich unten:

 enter image description here

Weitere Informationen und Erläuterungen zu allen Schlüsseln finden Sie in diesem Hinweis - App Transport Security Technote

5
Kampai

Zu Xcode 8.3.3 (8E3004b)

Es wurde in geändert 

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

 enter image description here

0
ytbryan

Mit dem folgenden Verfahren kann ich nicht sichere Inhalte in WKWebView öffnen.

  1. Zuerst habe ich Beliebige Lasten im Webinhalt zulassen = JA und Beliebige Lasten zulassen = JA in App Transport Security Settings Wörterbuch in info.plist. enter image description here
  2. Ich habe unten die Methode wkwebview delegate hinzugefügt:

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

    Vergessen Sie für den 2. Schritt nicht, den Delegierten zu registrieren als:

    überschreibe func viewDidLoad () {super.viewDidLoad () self.webView.navigationDelegate = self}

0