web-dev-qa-db-fra.com

iOS9 ne charge pas les ressources non sécurisées à partir d'une page sécurisée (SSL/HTTPS)

J'essaie de charger une page dans UIWebView sur iOS9 à l'aide de https: // URL. La page chargée inclut les CSS et les images d'un serveur non sécurisé.

Par exemple. la page chargée: https : //www.example.com/ qui inclut la feuille de style http : //www.example.com/style.css et image http : //www.example.com/image.jpg

Tout fonctionne si la page d'origine est chargée via une connexion non sécurisée (http standard). Tout fonctionne également sur iOS8 via HTTPS et HTTP.

J'ai défini NSAppTransportSecurity sur NSAllowsArbitraryLoads dans le fichier PLIST de l'application:

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

Cependant, lors du chargement de la page via HTTPS, les images sont chargées correctement, mais pas les fichiers CSS. On dirait que UIWebView bloque le chargement de ressources non sécurisées à partir d'une page sécurisée.

Existe-t-il un paramètre de UIWebView permettant de charger le CSS via une connexion non sécurisée?

26
UrK

Ce n'est pas lié à l'ATS. WebKit applique une stratégie de contenu mixte interdisant le chargement de l'accès à certaines classes de contenu "actif" (JS, CSS, etc.) via une connexion non sécurisée lorsque la page Host est diffusée via https.

Si vous examinez votre page dans l'inspecteur, vous verrez que cela est signalé dans le panneau des erreurs.


Suivi: vous ne pouvez pas désactiver le blocage de contenu mixte. Autoriser CSS ou JS non sécurisé réduit la sécurité de la page entière à celle de la ressource la moins sécurisée. Si vous devez charger css/js via http, la solution consiste à charger la page entière via http. Ainsi, l'interface utilisateur vue par l'utilisateur reflète correctement la sécurité du contenu.

17
Oliver

Dans votre info.plist, vous devez ajouter les clés de sécurité de transport d'application suivantes:

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

J'espère que cela devrait fonctionner pour vous.

12
ske57

App Transport Security révisé dans la version iOS9. Désormais, votre application est protégée d'une connexion sécurisée. Et iOS oblige à établir une connexion sécurisée. Cela peut être conflictuel dans votre cas.

De Documentation Apple 

Si votre application doit faire une demande à un domaine non sécurisé, vous devez spécifier ce domaine dans le fichier Info.plist de votre application.

Je pense donc que cela peut poser un problème lors du chargement du fichier .css pour les pages Web.

Essayez donc de spécifier votre domaine dans info.plist et vérifiez que les fichiers .css sont chargés ou non.

Modifier:


Spotlight: Vous devez ajouter plus de clés ici dans info.plist

Regardez cette clé NSThirdPartyExceptionAllowsInsecureHTTPLoads Cela permet à un domaine de service qui n'est pas contrôlé par le développeur et d'ajouter une exception à la couche de transport pour passer les ressources non sécurisées.

La structure permettant d'ajouter des clés pour App Transport Security est la suivante:

 enter image description here

Pour plus de détails et d’explications sur toutes les clés, consultez cette note - App Transport Security Technote

5
Kampai

Sur Xcode 8.3.3 (8E3004b)

Il a changé pour 

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

 enter image description here

0
ytbryan