¿Qué configuración debo poner en mi info.plist
para habilitar el modo HTTP según el siguiente mensaje de error?
La seguridad del transporte ha bloqueado una carga de recursos HTTP (http: //) en texto sin cifrar porque no es segura. Las excepciones temporales se pueden configurar a través del archivo Info.plist de su aplicación.
Supongamos que mi dominio es example.com
.
Allow arbitary loads
). Pronto esto no será posible ya que Apple requerirá ATS (Originalmente a fin de año, la fecha límite se extendió) - developer.apple.com/news/?id=12212016bRespuestas:
Si está utilizando Xcode 8.0+ y Swift 2.2+ o incluso el Objetivo C:
fuente
NSAllowsArbitraryLoads
establece entrue
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.Utilice NSAppTransportSecurity:
Debe establecer la clave NSAllowsArbitraryLoads en SÍ en el diccionario NSAppTransportSecurity en su archivo info.plist.
fuente
Aquí están las configuraciones visualmente:
fuente
Ver la publicación del foro ¿Seguridad de transporte de aplicaciones? .
También la página Configuración de excepciones de seguridad de transporte de aplicaciones en iOS 9 y OSX 10.11 .
Por ejemplo, puede agregar un dominio específico como:
La opción perezosa es:
Nota:
info.plist
es un archivo XML para que pueda colocar este código más o menos en cualquier lugar dentro del archivo.fuente
Esto se probó y estaba funcionando en la semilla GM de iOS 9: esta es la configuración para permitir que un dominio específico use HTTP en lugar de HTTPS:
NSAllowsArbitraryLoads
debe serlofalse
, ya que no permite todas las conexiones inseguras, pero la lista de excepciones permite la conexión a algunos dominios sin HTTPS.fuente
Esta es una solución rápida (pero no recomendada) para agregar esto en la lista:
Lo que significa (de acuerdo con la documentación de Apple ):
Realmente recomiendo enlaces:
que me ayudan a entender las razones y todas las implicaciones.
El XML (en el archivo Info.plist) a continuación:
no permite llamadas arbitrarias para todas las páginas, pero for
PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
permitirá que las conexiones usen el protocolo HTTP.Al XML anterior puede agregar:
si desea permitir conexiones inseguras para los subdominios de la dirección especificada.
El mejor enfoque es bloquear todas las cargas arbitrarias (establecido en falso) y agregar excepciones para permitir solo las direcciones que sabemos que están bien.
Para lectores interesados
Actualización 2018:
Apple no recomienda apagar esto: se puede encontrar más información en 207 sesiones WWDC 2018 con más detalles explicados con respecto a la seguridad
Dejando la respuesta original por razones históricas y fase de desarrollo
fuente
NSAllowsArbitraryLoads
debe serfalse
<key>NSIncludesSubdomains</key> <true/>
? ¿Cada entorno tiene que estar rodeado<dict>
? ¿Cómo editas este maldito archivo plist? ¿Cuál es el formato? : D Gracias.Para aquellos de ustedes que quieren un contexto más sobre por qué sucede esto, además de cómo solucionarlo, lea a continuación.
Con la introducción de iOS 9, para mejorar la seguridad de las conexiones entre una aplicación y los servicios web, las conexiones seguras entre una aplicación y su servicio web deben seguir las mejores prácticas . App Security Security impone el comportamiento de las mejores prácticas para:
Como se explica en la Nota técnica de App Transport Security , cuando se comunica con su servicio web, App Transport Security ahora tiene los siguientes requisitos y comportamientos:
En otras palabras, su solicitud de servicio web debe: a.) Usar HTTPS y b.) Estar encriptada usando TLS v1.2 con confidencialidad.
Sin embargo, como se mencionó en otras publicaciones, puede anular este nuevo comportamiento de App Transport Security especificando el dominio inseguro en la
Info.plist
aplicación.Para anular, deberá agregar las
NSAppTransportSecurity
>NSExceptionDomains
propiedades del diccionario a suInfo.plist
. A continuación, agregará el dominio de su servicio web alNSExceptionDomains
diccionario.Por ejemplo, si deseo omitir el comportamiento de Seguridad de transporte de aplicaciones para un servicio web en el host www.yourwebservicehost.com, entonces haría lo siguiente:
Abre tu aplicación en Xcode.
Busque el
Info.plist
archivo en Project Navigator y haga clic con el botón derecho del mouse en él y elija la opción de menú Abrir como > Código fuente . El archivo de la lista de propiedades aparecerá en el panel derecho.Coloque el siguiente bloque de propiedades dentro del diccionario de propiedades principal (debajo del primero
<dict>
).Si necesita proporcionar excepciones para dominios adicionales, entonces agregaría otra propiedad de diccionario debajo
NSExceptionDomains
.Para obtener más información sobre las claves mencionadas anteriormente, lea esta nota técnica ya mencionada .
fuente
./platforms/ios/<project>/<project>-Info.plist
conNSAllowsArbitraryLoads=false
y muchos dominios de excepción para servicios con diferentes combinaciones de TLS / HTTP / HTTPS. Inicialmente utilizado,NSAllowsArbitraryLoads=true
luego ajustado, solucionando problemas de las reglas a través de prueba y error para cumplir con las pautas y enviar para su aprobación. Lasconfig.xml
<access origin=.../>
declaraciones de nota completan parcialmente este archivo, pero actualmente requieren un ajuste mediante edición directa o mediante XCode para obtener los detalles correctos.<access origin="*"/>
(en config.xml) estableceNSAllowsArbitraryLoads=true
(para Cordova / Phonegap / aplicaciones híbridasNSExceptionAllowsInsecureHTTPLoads
establece entrue
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.No me gusta editar el plist directamente. Puede agregarlo fácilmente al plist usando la GUI:
Ahora cambie los datos en el área principal:
Add Row
fuente
NSAllowsArbitraryLoads
establece enYES
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.Hay dos soluciones para esto:
Soluciones 1:
Info.plist
archivo, agregue un diccionario con la clave 'NSAppTransportSecurity
''Allow Arbitrary Loads'
Plist
la estructura debe aparecer como se muestra en la imagen de abajo.Solución 2:
Info.plist
archivo, agregue un diccionario con la clave 'NSAppTransportSecurity
'NSExceptionDomains
''MyDomainName.com'
de tipo NSDictionaryNSIncludesSubdomains
' de tipoBoolean
y valor establecido comoYES
NSTemporaryExceptionAllowsInsecureHTTPLoads
' de tipoBoolean
y valor establecido comoYES
Plist
la estructura debe aparecer como se muestra en la imagen de abajo.Se prefiere la solución 2, ya que solo permite el dominio seleccionado, mientras que la solución 1 permite todas las conexiones HTTP inseguras.
fuente
NSAllowsArbitraryLoads
establece enYES
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.La seguridad de transporte está disponible en iOS 9.0 o posterior. Es posible que tenga esta advertencia cuando intente llamar a un WS dentro de su aplicación:
Agregar lo siguiente a su Info.plist deshabilitará ATS:
fuente
Ejemplo de desarrollo
Aquí hay una captura de pantalla de un plist que mantiene el ATS intacto (= seguro), pero permite que las conexiones a localhost se puedan realizar a través de HTTP en lugar de HTTPS . Funciona en Xcode 7.1.1.
fuente
NSExceptionAllowsInsecureHTTPLoads - YES
configuración predeterminada ?Ve a tu Info.plist
fuente
NSAllowsArbitraryLoads
establece entrue
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.Según Apple, generalmente deshabilitar ATS conducirá al rechazo de la aplicación, a menos que tenga una buena razón para hacerlo. Incluso entonces, debe agregar excepciones para dominios a los que puede acceder de forma segura.
Apple tiene una excelente herramienta que te dice exactamente qué configuración usar: en Terminal, ingresa
y nscurl verificará si esta solicitud falla, y luego probará una variedad de configuraciones y le dirá exactamente cuál pasa y qué hacer. Por ejemplo, para algunas URL de terceros que visito, este comando me dijo que este diccionario pasa:
Para distinguir entre sus propios sitios y los de terceros que están fuera de su control, use, por ejemplo, la clave NSThirdPartyExceptionRequiresForwardSecrecy.
fuente
NSExceptionAllowsInsecureHTTPLoads = true;
, pero resulta que no es necesaria.Averiguar qué configuraciones usar se puede realizar automáticamente, como se menciona en esta nota técnica :
fuente
NOTA: El dominio de excepción en su plist debe estar en CASO INFERIOR.
Ejemplo: ha nombrado a su máquina "MyAwesomeMacbook" en Configuración-> Compartir; su servidor (para fines de prueba) se ejecuta en MyAwesomeMacbook.local: 3000, y su aplicación debe enviar una solicitud a http: //MyAwesomeMacbook.local: 3000 / files ..., su lista deberá especificar "myawesomemacbook. local "como el dominio de excepción.
-
Su info.plist contendría ...
fuente
Utilizar:
Agregue un nuevo elemento, NSAppTransportSecurity , en el archivo plist con el tipo Diccionario , luego agregue el sub elemento NSAllowsArbitraryLoads en el diccionario de tipo Boolean y establezca el valor bool SÍ . Esto funciona para mi.
fuente
En 2015-09-25 (después de las actualizaciones de Xcode en 2015-09-18):
Usé un método no perezoso, pero no funcionó. Los siguientes son mis intentos.
Primero,
Y segundo,
Finalmente, usé el método perezoso:
Puede ser un poco inseguro, pero no pude encontrar otras soluciones.
fuente
NSAllowsArbitraryLoads
establece entrue
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.En swift 4 y xocde 10 se cambia NSAllowsArbitraryLoads para permitir cargas arbitrarias. así se verá así:
fuente
Vale la pena mencionar cómo llegar ...
Info.plist es uno de los archivos debajo del Main.storyboard o viewController.swift.
Cuando hace clic en él por primera vez, generalmente está en formato de tabla, por lo que debe hacer clic con el botón derecho en el archivo y 'abrir como' código fuente y luego agregar el siguiente código hacia el final, es decir:
Copia y pega el código justo arriba
que está al final
fuente
NSAllowsArbitraryLoads
establece entrue
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.Actualización para Xcode 7.1, que enfrenta el problema 27.10.15:
El nuevo valor en Info.plist es "Configuración de seguridad de transporte de aplicaciones". A partir de ahí, este diccionario debe contener:
fuente
Para aquellos que vinieron aquí tratando de encontrar la razón por la cual su WKWebView siempre es blanco y no carga nada (exactamente como se describe aquí, ¿cómo hago para que WKWebView funcione de manera rápida y para una aplicación macOS? ):
Si toda la ciencia de cohetes anterior no funciona para usted, verifique lo obvio: la configuración de sandbox
Al ser nuevo en Swift y Cocoa, pero con bastante experiencia en programación, pasé unas 20 horas para encontrar esta solución. Ninguno de los docenas de tutoriales de iOS hipster ni notas clave de Apple: nada menciona esta pequeña casilla de verificación.
fuente
Por defecto, iOS solo permite la API HTTPS. Como HTTP no es seguro, deberá deshabilitar la seguridad del transporte de aplicaciones. Hay dos formas de deshabilitar ATS: -
Haga clic en el proyecto en el panel izquierdo, seleccione el proyecto como objetivo y elija la pestaña de información. Debe agregar el diccionario en la siguiente estructura.
fuente
fuente
El uso
NSExceptionDomains
puede no aplicar un efecto simultáneamente debido a que el sitio de destino puede cargar recursos (por ejemplo,js
archivos) desde dominios externoshttp
. Se puede resolver agregando estos dominios externos aNSExceptionDomains
.Para inspeccionar qué recursos no se pueden cargar, intente utilizar la depuración remota. Aquí hay un tutorial: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/
fuente
Para Cordova, si desea agregarlo a su ios.json, haga lo siguiente:
Y debería estar dentro de:
fuente
NSAllowsArbitraryLoads
establece entrue
? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.Como muchos han notado, este es un problema de características que viene con iOS 9.0. Han agregado una cosa llamada Seguridad de transporte de aplicaciones, y a mí también me molestó cuando rompió mis aplicaciones.
Puede vendarlo con la clave NSAllowsArbitraryLoads a SÍ en el diccionario NSAppTransportSecurity en su archivo .plist, pero finalmente deberá volver a escribir el código que forma sus URL para formar el prefijo HTTPS: //.
Apple ha reescrito la clase NSUrlConnection en iOS 9.0. Puedes leer sobre esto en NSURLConnection .
De lo contrario, es posible que deba retirarse de iOS 9.0 hasta que tenga tiempo de implementar la solución correcta.
fuente