Que configuração eu preciso colocar no meu info.plist
para ativar o modo HTTP de acordo com a seguinte mensagem de erro?
A segurança de transporte bloqueou um carregamento de recurso HTTP (http: //) em texto não criptografado, pois é inseguro. Exceções temporárias podem ser configuradas através do arquivo Info.plist do seu aplicativo.
Suponha que meu domínio seja example.com
.
Allow arbitary loads
). Logo isso não será possível desde que a Apple vai exigir ATS (Originalmente o final do ano - prazo foi estendido) - developer.apple.com/news/?id=12212016bRespostas:
Se você estiver usando o Xcode 8.0+ e o Swift 2.2+ ou até o Objetivo C:
fonte
NSAllowsArbitraryLoads
definido comotrue
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.Use NSAppTransportSecurity:
Você deve definir a chave NSAllowsArbitraryLoads como YES no dicionário NSAppTransportSecurity em seu arquivo info.plist .
fonte
Aqui estão as configurações visualmente:
fonte
Veja a publicação no fórum Application Transport Security? .
Também na página Configurando exceções de segurança do App Transport no iOS 9 e OSX 10.11 .
Por exemplo, você pode adicionar um domínio específico como:
A opção lenta é:
Nota:
info.plist
é um arquivo XML para que você possa colocar esse código mais ou menos em qualquer lugar dentro do arquivo.fonte
Isso foi testado e estava funcionando na semente do iOS 9 GM - esta é a configuração para permitir que um domínio específico use HTTP em vez de HTTPS:
NSAllowsArbitraryLoads
deve serfalse
, porque não permite todas as conexões inseguras, mas a lista de exceções permite a conexão com alguns domínios sem HTTPS.fonte
Esta é uma solução rápida (mas não recomendada) para adicionar isso ao plist:
O que significa (de acordo com a documentação da Apple ):
Eu realmente recomendo links:
o que me ajuda a entender as razões e todas as implicações.
O XML (no arquivo Info.plist) abaixo irá:
não permitir chamadas arbitrárias para todas as páginas, mas for
PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
permitirá que essas conexões usem o protocolo HTTP.Para o XML acima, você pode adicionar:
se você deseja permitir conexões não seguras para os subdomínios do endereço especificado.
A melhor abordagem é bloquear todas as cargas arbitrárias (configuradas como false) e adicionar exceções para permitir apenas endereços que sabemos que estão bem.
Para leitores interessados
Atualização de 2018:
A Apple não recomenda a desativação - mais informações podem ser encontradas na sessão 207 da WWDC 2018 com mais coisas explicadas em relação à segurança
Deixando a resposta original por razões históricas e fase de desenvolvimento
fonte
NSAllowsArbitraryLoads
deve serfalse
<key>NSIncludesSubdomains</key> <true/>
? Todas as configurações precisam ser cercadas<dict>
? como você edita esse maldito arquivo plist? Qual é a formatação? : D Obrigado.Para aqueles que desejam um contexto mais aprofundado sobre o motivo disso acontecer, além de como corrigi-lo, leia abaixo.
Com a introdução do iOS 9, para melhorar a segurança das conexões entre um aplicativo e serviços da web, as conexões seguras entre um aplicativo e seu serviço da web devem seguir as práticas recomendadas . O comportamento das melhores práticas é imposto pelo App Transport Security para:
Conforme explicado na Nota técnica de segurança de transporte de aplicativo , ao se comunicar com seu serviço da Web, o App Transport Security agora possui os seguintes requisitos e comportamento:
Em outras palavras, sua solicitação de serviço da web deve: a.) Usar HTTPS eb.) Ser criptografada usando o TLS v1.2 com sigilo direto.
No entanto, como mencionado em outras postagens, você pode substituir esse novo comportamento do App Transport Security especificando o domínio não seguro no diretório
Info.plist
aplicativo.Para substituir, você precisará adicionar o
NSAppTransportSecurity
>NSExceptionDomains
propriedades do dicionário ao seuInfo.plist
. Em seguida, você adicionará o domínio do seu serviço da web aoNSExceptionDomains
dicionário.Por exemplo, se eu quiser ignorar o comportamento da Segurança de Transporte de Aplicativo para um serviço da Web no host www.yourwebservicehost.com , faça o seguinte:
Abra seu aplicativo no Xcode.
Localize o
Info.plist
arquivo no Project Navigator e clique com o botão direito do mouse e escolha a opção de menu Abrir como > Código-fonte . O arquivo da lista de propriedades aparecerá no painel direito.Coloque o seguinte bloco de propriedades dentro do dicionário de propriedades principal (abaixo do primeiro
<dict>
).Se você precisar fornecer exceções para domínios adicionais, adicione outra propriedade de dicionário abaixo
NSExceptionDomains
.Para descobrir mais sobre as chaves mencionadas acima, leia esta nota técnica já mencionada .
fonte
./platforms/ios/<project>/<project>-Info.plist
comNSAllowsArbitraryLoads=false
muitos domínios de exceção para serviços com diversas combinações de TLS / HTTP / HTTPS. Inicialmente usado, emNSAllowsArbitraryLoads=true
seguida, ajustado, solucionando problemas das regras por tentativa e erro para cumprir as diretrizes e enviar para aprovação. Asconfig.xml
<access origin=.../>
instruções de observação preenchem parcialmente esse arquivo, mas atualmente requerem ajustes por edição direta ou via XCode para obter os detalhes corretos.<access origin="*"/>
(no config.xml) defineNSAllowsArbitraryLoads=true
(para aplicativos Cordova / Phonegap / híbridoNSExceptionAllowsInsecureHTTPLoads
definido comotrue
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.Eu não gosto de editar o plist diretamente. Você pode adicioná-lo facilmente ao plist usando a GUI:
Agora altere os dados na área principal:
Add Row
fonte
NSAllowsArbitraryLoads
definido comoYES
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.Existem duas soluções para isso:
Soluções 1:
Info.plist
arquivo, adicione um dicionário com a chave 'NSAppTransportSecurity
''Allow Arbitrary Loads'
Plist
estrutura deve aparecer como mostrado na imagem abaixo.Solução 2:
Info.plist
arquivo, adicione um dicionário com a chave 'NSAppTransportSecurity
'NSExceptionDomains
''MyDomainName.com'
do tipo NSDictionaryNSIncludesSubdomains
' do tipoBoolean
e valor definido comoYES
NSTemporaryExceptionAllowsInsecureHTTPLoads
' do tipoBoolean
e valor definido comoYES
Plist
estrutura deve aparecer como mostrado na imagem abaixo.A solução 2 é preferida, pois permite apenas o domínio selecionado, enquanto a solução 1 permite todas as conexões HTTP inseguras.
fonte
NSAllowsArbitraryLoads
definido comoYES
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.A segurança de transporte está disponível no iOS 9.0 ou posterior. Você pode receber este aviso ao tentar chamar um WS dentro do seu aplicativo:
Adicionar o seguinte ao seu Info.plist desativará o ATS:
fonte
Exemplo de Desenvolvimento
Aqui está uma captura de tela de um plist que mantém o ATS intacto (= seguro), mas permite que as conexões com o host local possam ser feitas via HTTP em vez de HTTPS . Funciona no Xcode 7.1.1.
fonte
NSExceptionAllowsInsecureHTTPLoads - YES
configuração padrão ?Vá para o seu Info.plist
fonte
NSAllowsArbitraryLoads
definido comotrue
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.Segundo a Apple, geralmente a desativação do ATS levará à rejeição de aplicativos, a menos que você tenha um bom motivo para fazê-lo. Mesmo assim, você deve adicionar exceções para domínios que você pode acessar com segurança.
A Apple possui uma excelente ferramenta que informa exatamente quais configurações usar: No Terminal, digite
O nscurl verificará se essa solicitação falhará e, em seguida, tente várias configurações e informará exatamente qual delas é aprovada e o que fazer. Por exemplo, para alguns URLs de terceiros que visito, este comando me disse que esse dicionário é aprovado:
Para distinguir entre seus próprios sites e sites de terceiros que estão fora de seu controle, use, por exemplo, a chave NSThirdPartyExceptionRequiresForwardSecrecy.
fonte
NSExceptionAllowsInsecureHTTPLoads = true;
, incluindo , mas acontece que não é necessário.Descobrir quais configurações usar podem ser executadas automaticamente, conforme mencionado nesta nota técnica :
fonte
NOTA: O domínio de exceção no seu plist deve estar em LOWER-CASE.
Exemplo: você nomeou sua máquina como "MyAwesomeMacbook" em Configurações-> Compartilhamento; seu servidor (para fins de teste) está sendo executado em MyAwesomeMacbook.local: 3000 e seu aplicativo precisa enviar uma solicitação para http: //MyAwesomeMacbook.local: 3000 / files ..., sua lista, você precisará especificar "myawesomemacbook. local "como o domínio de exceção.
-
Seu info.plist conteria ...
fonte
Usar:
Adicione um novo item, NSAppTransportSecurity , no arquivo plist com o tipo Dictionary , depois adicione o subitem NSAllowsArbitraryLoads no dicionário do tipo Booleano e defina o valor booleano YES . Isso funciona para mim.
fonte
Em 25/09/2015 (após as atualizações do Xcode em 18/09/2015):
Eu usei um método não preguiçoso, mas não funcionou. As seguintes são minhas tentativas.
Primeiro,
E em segundo lugar,
Por fim, usei o método preguiçoso:
Pode ser um pouco inseguro, mas não consegui encontrar outras soluções.
fonte
NSAllowsArbitraryLoads
definido comotrue
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.No swift 4 e no xocde 10, altere NSAllowsArbitraryLoads para permitir cargas arbitrárias. então será assim:
fonte
Vale a pena mencionar como chegar lá ...
Info.plist é um dos arquivos abaixo do Main.storyboard ou viewController.swift.
Quando você clica nele pela primeira vez, geralmente ele está no formato de tabela; portanto, clique com o botão direito do mouse no arquivo e 'abra como' Código-fonte e adicione o código abaixo no final, ou seja:
Copie e cole o código logo acima
que está no fim.
fonte
NSAllowsArbitraryLoads
definido comotrue
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.Atualização para o Xcode 7.1, enfrentando o problema 27.10.15:
O novo valor no Info.plist é "Configurações de segurança de transporte de aplicativos". A partir daí, este dicionário deve conter:
fonte
Para aqueles que vieram aqui tentando descobrir o motivo pelo qual o WKWebView é sempre branco e não carrega nada (exatamente como descrito aqui, como faço para que o WKWebView funcione rapidamente e para um aplicativo macOS ):
Se toda a ciência do foguete acima não funcionar, verifique o óbvio: as configurações da sandbox
Sendo novo no Swift e no cacau, mas bastante experiente em programação, passo cerca de 20 horas para encontrar esta solução. Nenhuma das dezenas de tutoriais de hipster para iOS nem notas-chave da apple - nada menciona essa pequena caixa de seleção.
fonte
Por padrão, o iOS permite apenas a API HTTPS. Como o HTTP não é seguro, você precisará desativar a segurança de transporte de aplicativos. Há duas maneiras de desativar o ATS:
Clique no projeto no painel esquerdo, selecione o projeto como destino e escolha a guia Informações. Você precisa adicionar o dicionário na seguinte estrutura.
fonte
fonte
O uso
NSExceptionDomains
pode não aplicar um efeito simultaneamente, pois o site de destino pode carregar recursos (por exemplo,js
arquivos) de domínios externoshttp
. Isso pode ser resolvido adicionando esses domínios externosNSExceptionDomains
também.Para inspecionar quais recursos não podem ser carregados, tente usar a Depuração remota. Aqui está um tutorial: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/
fonte
Para o Cordova, se você quiser adicioná-lo ao seu ios.json, faça o seguinte:
E deve estar dentro de:
fonte
NSAllowsArbitraryLoads
definido comotrue
? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.Como muitos observaram, esse é um problema de recurso que vem com o iOS 9.0. Eles adicionaram uma coisa chamada App Transport Security, e eu também fiquei chateado quando ele quebrou meus aplicativos.
Você pode fazer um curativo com a chave NSAllowsArbitraryLoads para YES no dicionário NSAppTransportSecurity em seu arquivo .plist, mas, em última análise, será necessário reescrever o código que forma seus URLs para formar o prefixo HTTPS: //.
A Apple reescreveu a classe NSUrlConnection no iOS 9.0. Você pode ler sobre isso em NSURLConnection .
Caso contrário, talvez você precise sair do iOS 9.0 até ter tempo para implementar a solução correta.
fonte