ios - texto - como ver mensajes bloqueados en iphone




La seguridad del transporte ha bloqueado un texto en claro HTTP (17)

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)

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.


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>

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>

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


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.


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.

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.







app-transport-security