ver texto saber recuperar numero mensajes llamado llamadas desconocidas contacto como bloquear bloqueados bloqueado ios xcode ios9 ios10 app-transport-security

ios - saber - La seguridad del transporte ha bloqueado un texto en claro HTTP



como saber si un numero bloqueado te ha llamado iphone (25)

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.

¿Qué configuración necesito 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.

Suponga que mi dominio es example.com .


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:

  • Permitir cargas arbitrarias = SÍ
  • Dominios de excepción (inserte aquí su dominio http)

Aquí están las configuraciones visualmente:


Averiguar qué configuraciones usar se puede realizar automáticamente, como se menciona en esta nota técnica :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com


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.


El uso de NSExceptionDomains puede no aplicar un efecto simultáneamente debido a que el sitio de destino puede cargar recursos (por ejemplo, archivos js ) desde dominios externos a través de http . Se puede resolver agregando estos dominios externos a NSExceptionDomains también.

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/


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,

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>www.xxx.yyy.zzz</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>

Y segundo,

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

Finalmente, usé el método perezoso:

<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>

Puede ser un poco inseguro, pero no pude encontrar otras soluciones.


En swift 4 y xocde 10 se cambia NSAllowsArbitraryLoads para permitir cargas arbitrarias. así se verá así:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>www.xxx.yyy.zzz</key> <dict> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>


Esta es una solución rápida (pero no recomendada) para agregar esto en la lista:

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

Lo que significa (de acuerdo con la documentación de Apple ):

NSAllowsArbitraryLoads
Un valor booleano que se usa para deshabilitar App Transport Security para cualquier dominio que no se encuentre en el diccionario NSExceptionDomains. Los dominios listados utilizan la configuración especificada para ese dominio.

El valor predeterminado de NO requiere el comportamiento predeterminado de Seguridad de transporte de aplicaciones para todas las conexiones.

Realmente recomiendo enlaces:

que me ayudan a entender las razones y todas las implicaciones.

El XML (en el archivo Info.plist) a continuación:

<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>

no permitir llamadas arbitrarias para todas las páginas, pero para PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE permitirá que las conexiones usen el protocolo HTTP.

Al XML anterior puede agregar:

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

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 de WWDC 2018 con más detalles explicados con respecto a la seguridad

Dejando la respuesta original por razones históricas y fase de desarrollo


Esto se probó y funcionaba 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:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <false/> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <!--Include your domain at this line --> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>

NSAllowsArbitraryLoads debe ser false , ya que no permite todas las conexiones inseguras, pero la lista de excepciones permite la conexión a algunos dominios sin HTTPS.


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:

Application Transport Security ha bloqueado una carga de recursos de texto en claro HTTP (http: //) ya que no es segura. Las excepciones temporales se pueden configurar a través del archivo Info.plist de su aplicación.

Agregar lo siguiente a su Info.plist deshabilitará ATS:

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


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 ...

<key>App Transport Security Settings</key> <dict> <key>Allow Arbitrary Loads</key><true/> </dict>


No me gusta editar el plist directamente. Puede agregarlo fácilmente al plist usando la GUI:

  • Haga clic en Info.plist en el Navegador a la izquierda.
  • Ahora cambie los datos en el área principal:

    • En la última línea agregue el +
    • Ingrese el nombre del grupo: Configuración de seguridad de transporte de aplicaciones
    • Haga clic derecho en el grupo y seleccione Add Row
    • Ingrese Permitir cargas arbitrarias
    • Establezca el valor de la derecha en


Para Cordova, si desea agregarlo a su ios.json, haga lo siguiente:

"*-Info.plist": { "parents": { } }

Y debería estar dentro de:

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


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:

  • evitar la divulgación accidental, y
  • proporcionar un comportamiento predeterminado que sea seguro.

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:

  • El servidor debe admitir al menos la versión 1.2 del protocolo de Seguridad de la capa de transporte (TLS).
  • Los cifrados de conexión están limitados a aquellos que brindan confidencialidad directa (consulte la lista de cifrados a continuación).
  • Los certificados deben firmarse utilizando un algoritmo hash de firma SHA256 o superior, con una clave RSA de 2048 bits o más o una clave de curva elíptica (ECC) de 256 bits o más.
  • Los certificados no válidos provocan un fallo grave y no hay conexión.

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 Info.plist de su aplicación.

Para anular, deberá agregar las propiedades del diccionario NSAppTransportSecurity > NSExceptionDomains a su Info.plist . A continuación, agregará el dominio de su servicio web al diccionario NSExceptionDomains .

Por ejemplo, si deseo omitir el comportamiento de Seguridad de transporte de aplicaciones para un servicio web en el host www.yourwebservicehost.com , haría lo siguiente:

  1. Abre tu aplicación en Xcode.

  2. Busque el archivo Info.plist 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.

  3. Coloque el siguiente bloque de propiedades dentro del diccionario de propiedades principal (debajo del primer <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>

Si necesita proporcionar excepciones para dominios adicionales, entonces agregaría otra propiedad de diccionario debajo de NSExceptionDomains .

Para obtener más información sobre las claves mencionadas anteriormente, lea esta nota técnica ya mencionada .


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. Ninguna de las docenas de tutoriales de iOS hipster ni notas clave de Apple: nada menciona esta pequeña casilla de verificación.


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: -

1. Agregue el código fuente en info.plist del proyecto y agregue el siguiente código en la etiqueta raíz.

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

2. Usando la información del proyecto.

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.


Según Apple, la desactivación general de ATS provocará el 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 pueda acceder de forma segura.

Apple tiene una excelente herramienta que te dice exactamente qué configuración usar: en Terminal, ingresa

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

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 alguna URL de terceros que visito, este comando me dijo que este diccionario pasa:

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

Para distinguir entre sus propios sitios y los de terceros que están fuera de su control, use, por ejemplo, la clave NSThirdPartyExceptionRequiresForwardSecrecy.


Si está utilizando Xcode 8.0+ y Swift 2.2+ o incluso el Objetivo C:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>


Utilice NSAppTransportSecurity:

Debe establecer la clave NSAllowsArbitraryLoads en en el diccionario NSAppTransportSecurity en su archivo info.plist.


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 . Esto funciona para mi.


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:

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

Copia y pega el código justo arriba

"</dict> </plist>"

que está al final


Ve a tu Info.plist

  1. Haga clic derecho en el espacio vacío y haga clic en Agregar fila
  2. Escriba el nombre clave como NSAppTransportSecurity, debajo de él
  3. Seleccione Dominios de excepción, agregue un nuevo elemento a esto
  4. Escriba su nombre de dominio al que se necesita acceder
  5. Cambie el tipo de dominio de cadena a diccionario, agregue un nuevo elemento
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, que será un valor booleano con un valor verdadero.

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:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--Include to allow HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>

La opción perezosa es:

<key>NSAppTransportSecurity</key> <dict> <!--Include to allow all connections (DANGER)--> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

Nota:

info.plist es un archivo XML, por lo que puede colocar este código más o menos en cualquier lugar dentro del archivo.


Hay dos soluciones para esto:

Soluciones 1:

  1. En el archivo Info.plist , agregue un diccionario con la clave '' NSAppTransportSecurity ''
  2. Agregue otro elemento dentro del diccionario con la clave ''Allow Arbitrary Loads''

Plist estructura de lista debe aparecer como se muestra en la imagen a continuación.

Solución 2:

  1. En el archivo Info.plist , agregue un diccionario con la clave '' NSAppTransportSecurity ''
  2. Agregue otro elemento dentro del diccionario con la clave '' NSExceptionDomains ''
  3. Agregue un elemento con la clave ''MyDomainName.com'' del tipo NSDictionary
  4. Agregue un elemento con la clave '' NSIncludesSubdomains '' de tipo Boolean y el valor establecido como YES
  5. Agregue un elemento con la clave '' NSTemporaryExceptionAllowsInsecureHTTPLoads '' de tipo Boolean y establezca el valor como YES

Plist estructura de lista debe aparecer como se muestra en la imagen a continuación.

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.