¿Cómo puedo agregar NSAppTransportSecurity a mi archivo info.plist?

124

https://developer.apple.com/videos/wwdc/2015/?id=711 @ 5: 55

Parece que no puedo agregar esto a mi info.plist. No tiene valor. Estoy ejecutando XCode Versión 7.0 beta (7A121l) y probando en iOS9.

Debido a que no puedo declarar específicamente qué URL quiero, como se ve en el video, sigo obteniendo "App Transport Security ha bloqueado una carga de recursos HTTP (http: //) en texto claro ya que no es seguro. Se pueden configurar excepciones temporales a través de la aplicación Archivo Info.plist "errores.

Sin embargo, parece que no puedo configurarlo. ¿Algunas ideas?

Chris P
fuente
Realmente ya no tienes una pregunta, simplemente debes seguir adelante y responder tu propia pregunta y luego aceptar después del retraso de tiempo apropiado.
Norman H
Qué es un nombre de dominio ? ¿Es esta una URL base de servidor o alguna otra? ¿Y dónde encontrar el nombre de dominio de mi aplicación?
Nik
El nombre de dominio es uno de los términos más comunes utilizados. Bueno, este es uno que se compra y luego, después del alojamiento, puede usarlo como la URL base del servidor que usa para las API. No hay nada como el nombre de dominio de la aplicación. Por lo tanto, puede usar el nombre de dominio como aquel donde se escriben las API.
Ashish

Respuestas:

131

prueba con esto --- funcionó para mí en Xcode-beta 4 7.0

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.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>

También una opción más, si desea deshabilitar ATS puede usar esto:

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

Pero esto no se recomienda en absoluto. El servidor debe tener los certificados SSL y para que no haya fugas de privacidad.

Ashish
fuente
Tengo XCode 7.2 (7C68) y he modificado (deshabilitando completamente ATS) la lista de información de mi proyecto de prueba. Pero no está funcionando. ¿Cualquier pista?
Sanandrea
generalmente funciona ... ¿puede pegar su código aquí y luego podemos ver
Ashish
Y también si usted tiene dos o más domanis hay que añadir <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> lo contrario, para mí no lo hizo el trabajo de versión de lanzamiento por alguna razón
P.Lorand
90

Debe agregar solo la clave NSAllowsArbitraryLoads a YES en el diccionario NSAppTransportSecurity en su archivo info.plist.

Por ejemplo,

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

ingrese la descripción de la imagen aquí

Hiren Varu
fuente
1
Esta es una solución alternativa. El verdadero problema es la muerte con la respuesta de @ Ashish
judepereira
45

Eso no estaba funcionando para mí, pero esto funcionó:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  
Poli
fuente
Creo que te refieres en <true/>lugar de<YES/>
Clifton Labrum
1
Desde el punto de vista de la seguridad, esta es exactamente una forma, cómo NO hacerlo, porque nadie revisará esta sección de código y la actualizará a los dominios especificados correctamente.
igraczech
1
Esta no es una buena práctica. Más bien deberíamos permitir dominios específicos.
Ashish
1
Para otros novatos como yo: Asegúrese de poner esta en la posición correcta (al final, encerrado por las existentes </dict>y </plist>las etiquetas:
Pwdr
21

Solo para aclarar ... Siempre debes usar httpS

Pero puede omitirlo agregando la excepción:

ingrese la descripción de la imagen aquí

Manuel Pardo
fuente
9

Xcode 8.2, iOS 10

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Oleg Malovichko
fuente
4

Respuesta de actualización (después de wwdc 2016):

IOS apps will require secure HTTPS connections by the end of 2016

App Transport Security, o ATS, es una característica que Apple introdujo en iOS 9. Cuando ATS está habilitado, obliga a una aplicación a conectarse a servicios web a través de una conexión HTTPS en lugar de HTTP no seguro.

Sin embargo, los desarrolladores aún pueden desactivar ATS y permitir que sus aplicaciones envíen datos a través de una conexión HTTP como se menciona en las respuestas anteriores. A finales de 2016, Apple hará que ATS sea obligatorio para todos los desarrolladores que esperan enviar sus aplicaciones a la App Store. enlace

Paraneetharan Saravanaperumal
fuente
después de fin de año, se rechazará una nueva aplicación o una aplicación de actualización sin usar https. ¿Qué pasa con la aplicación existente con el bypass? (¿Necesitamos una actualización de fuerza?)
Paraneetharan Saravanaperumal
2
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>org</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

Esto permitirá conectarse a .com .net .org

Subirdcom
fuente
Gracias por un ejemplo que muestra cómo agregar múltiples dominios.
AtheistP3ace
2
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
Santhosh Legent
fuente
1

Para explicar un poco más sobre la respuesta de ParaSara: la seguridad del transporte de aplicaciones se volverá obligatoria y tratar de desactivarla puede hacer que su aplicación sea rechazada.

Como desarrollador, puede desactivar la seguridad de App Transport si su código de red no funciona y desea continuar con otros desarrollos antes de solucionar cualquier problema. Digamos que en un equipo de cinco, cuatro pueden continuar trabajando en otras cosas mientras uno soluciona todos los problemas. También puede desactivar la seguridad de App Transport como herramienta de depuración si tiene problemas de red y desea verificar si son causados ​​por la seguridad de App Transport. Tan pronto como sepa, debe volver a encenderlo de inmediato.

La solución que debe usar en el futuro es no usar http en absoluto, a menos que use un servidor de terceros que no sea compatible con https. Si su propio servidor no es compatible con https, Apple tendrá un problema con eso. Incluso con servidores de terceros, no apostaría a que Apple lo acepta.

Lo mismo con las diversas comprobaciones de seguridad del servidor. En algún momento, Apple solo aceptará excepciones justificables.

Pero sobre todo, considere esto: está poniendo en peligro la privacidad de sus clientes. Eso es un gran no-no en mi libro. No hagas eso. Arregle su código, no solicite permiso para ejecutar código inseguro.

gnasher729
fuente
1

En la línea de comandos de mac shell , use el siguiente comando:

plutil -insert NSAppTransportSecurity -xml "<array><string> hidden </string></array>" [location of your xcode project]/Info.plist 

El comando agregará todos los valores necesarios en su archivo plist.

Avi Levin
fuente
1

XCODE 8, Swift 3: debe agregar una fila: **

"Configuración de seguridad de transporte de aplicaciones"

** en la lista de propiedades info.plist inside information.

Robert Juamarcal
fuente
0

Xcode 9.2, Swift 4, esto funciona para mí.

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