다음 오류 메시지에 따라 HTTP 모드를 활성화하려면 info.plist
에 어떤 설정을 넣어야 합니까?
전송 보안은 안전하지 않기 때문에 일반 텍스트 HTTP(http://) 리소스 로드를 차단했습니다. 임시 예외는 앱의 Info.plist 파일을 통해 구성할 수 있습니다.
내 도메인이 example.com
이라고 가정합니다.
질문자 :Jeef
다음 오류 메시지에 따라 HTTP 모드를 활성화하려면 info.plist
에 어떤 설정을 넣어야 합니까?
전송 보안은 안전하지 않기 때문에 일반 텍스트 HTTP(http://) 리소스 로드를 차단했습니다. 임시 예외는 앱의 Info.plist 파일을 통해 구성할 수 있습니다.
내 도메인이 example.com
이라고 가정합니다.
NSAppTransportSecurity 사용:
info.plist 파일의 NSAppTransportSecurity 사전에서 NSAllowsArbitraryLoads 키를 YES 로 설정해야 합니다.
포럼 게시물 Application Transport Security를 참조하십시오. .
iOS 9 및 OSX 10.11에서 앱 전송 보안 예외 구성 페이지도 참조하세요.
예를 들어 다음과 같은 특정 도메인을 추가할 수 있습니다.
<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>
게으른 옵션은 다음과 같습니다.
<key>NSAppTransportSecurity</key> <dict> <!--Include to allow all connections (DANGER)--> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
info.plist
는 XML 파일이므로 이 코드를 파일 내부 어느 곳에나 배치할 수 있습니다.
Xcode 8.0 이상 및 Swift 2.2 이상 또는 심지어 Objective C를 사용하는 경우:
모든 사이트에 대한 HTTP 연결을 허용하려면 다음 키를 사용할 수 있습니다.
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
추가하기 위해 연결할 도메인을 알고 있는 경우:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>
이것은 테스트되었으며 iOS 9 GM 시드에서 작동했습니다. 이것은 특정 도메인이 HTTPS 대신 HTTP를 사용하도록 허용하는 구성입니다.
<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
는 모든 안전하지 않은 연결을 허용하지 않기 때문에 false
여야 하지만 예외 목록은 HTTPS 없이 일부 도메인에 대한 연결을 허용합니다.
이것은 plist에 추가하는 빠른 해결 방법입니다(하지만 권장하지 않음).
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
이는 다음을 의미합니다( Apple 설명서 에 따르면).
NSAllowsArbitraryLoads
NSExceptionDomains 사전에 나열되지 않은 모든 도메인에 대해 App Transport Security를 비활성화하는 데 사용되는 부울 값입니다. 나열된 도메인은 해당 도메인에 대해 지정된 설정을 사용합니다.기본값인 NO를 사용하려면 모든 연결에 대한 기본 App Transport Security 동작이 필요합니다.
나는 정말로 링크를 추천한다:
이유와 모든 의미를 이해하는 데 도움이 됩니다.
아래의 XML(Info.plist 파일)은 다음을 수행합니다.
<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>
모든 페이지에 대한 임의 호출을 허용하지 않지만 PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
경우 해당 연결이 HTTP 프로토콜을 사용하도록 허용합니다.
위의 XML에 다음을 추가할 수 있습니다.
<key>NSIncludesSubdomains</key> <true/>
지정된 주소의 하위 도메인에 대해 안전하지 않은 연결을 허용하려는 경우.
가장 좋은 방법은 모든 임의의 로드를 차단하고(거짓으로 설정) 우리가 알고 있는 주소만 허용하도록 예외를 추가하는 것입니다.
2018년 업데이트:
Apple은 이 기능을 끄는 것을 권장하지 않습니다. 207 세션 WWDC 2018 에서 보안과 관련하여 설명된 더 많은 정보를 찾을 수 있습니다.
역사적 이유 및 개발 단계로 인해 원래의 답변을 남겨 두십시오.
문제를 해결하는 방법과 함께 왜 이런 일이 발생하는지에 대한 자세한 내용을 알고 싶다면 아래를 읽으십시오.
iOS 9의 도입으로 앱과 웹 서비스 간의 연결 보안을 개선하려면 앱과 웹 서비스 간의 보안 연결이 모범 사례를 따라야 합니다 . 모범 사례 동작은 App Transport Security 에서 다음을 위해 시행합니다.
App Transport Security Technote 에 설명된 대로 웹 서비스와 통신할 때 App Transport Security에는 이제 다음 요구 사항 및 동작이 있습니다.
- 서버는 최소한 TLS(전송 계층 보안) 프로토콜 버전 1.2를 지원해야 합니다.
- 연결 암호는 순방향 비밀성을 제공하는 암호로 제한됩니다(아래 암호 목록 참조).
- 인증서는 2048비트 이상의 RSA 키 또는 256비트 이상의 ECC(Elliptic-Curve) 키와 함께 SHA256 이상의 서명 해시 알고리즘을 사용하여 서명해야 합니다.
- 유효하지 않은 인증서로 인해 심각한 오류가 발생하고 연결이 끊어집니다.
즉, 웹 서비스 요청은 a.) HTTPS를 사용하고 b.) 순방향 비밀성을 가진 TLS v1.2를 사용하여 암호화해야 합니다.
Info.plist
에서 안전하지 않은 도메인을 지정하여 App Transport Security에서 이 새로운 동작을 재정의할 수 있습니다.
NSAppTransportSecurity
> NSExceptionDomains
사전 속성을 Info.plist
에 추가해야 합니다. 다음으로 웹 서비스의 도메인을 NSExceptionDomains
사전에 추가합니다.
예를 들어 www.yourwebservicehost.com 호스트의 웹 서비스에 대한 App Transport Security 동작을 우회하려면 다음을 수행합니다.
Xcode에서 앱을 엽니다.
Info.plist
파일을 찾아 "마우스 오른쪽 버튼"으로 클릭하고 다른 이름으로 열기 > 소스 코드 메뉴 옵션을 선택합니다. 속성 목록 파일이 오른쪽 창에 나타납니다.
다음 속성 블록을 기본 속성 사전 내부(첫 번째 <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>
추가 도메인에 대한 예외를 제공해야 하는 경우 NSExceptionDomains
아래에 다른 사전 속성을 추가합니다.
위에서 언급한 키에 대해 자세히 알아보려면 이미 언급된 기술 노트를 읽으십시오.
나는 plist를 직접 편집하는 것을 좋아하지 않습니다. GUI를 사용하여 plist에 쉽게 추가할 수 있습니다.
이제 기본 영역의 데이터를 변경합니다.
Add Row
이에 대한 두 가지 솔루션이 있습니다.
솔루션 1 :
Info.plist
NSAppTransportSecurity
' 키가 있는 사전을 추가합니다.'Allow Arbitrary Loads'
키를 사용하여 사전 내부에 다른 요소 추가 Plist
구조는 아래 그림과 같이 나타나야 합니다.
솔루션 2:
Info.plist
NSAppTransportSecurity
' 키가 있는 사전을 추가합니다.NSExceptionDomains
' 키가 있는 사전 내부에 다른 요소 추가'MyDomainName.com'
키가 있는 요소 추가Boolean
유형의 NSIncludesSubdomains
' 키가 있는 요소를 추가하고 값을 YES
Boolean
유형의 NSTemporaryExceptionAllowsInsecureHTTPLoads
' 키와 값이 YES
설정된 요소 추가 Plist
구조는 아래 그림과 같이 나타나야 합니다.
솔루션 2는 선택된 도메인만 허용하는 반면 솔루션 1은 모든 안전하지 않은 HTTP 연결을 허용하므로 선호됩니다.
전송 보안은 iOS 9.0 이상에서 사용할 수 있습니다. 애플리케이션 내에서 WS를 호출하려고 할 때 다음과 같은 경고가 표시될 수 있습니다.
애플리케이션 전송 보안은 안전하지 않기 때문에 일반 텍스트 HTTP(http://) 리소스 로드를 차단했습니다. 임시 예외는 앱의 Info.plist 파일을 통해 구성할 수 있습니다.
Info.plist에 다음을 추가하면 ATS가 비활성화됩니다.
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict>
다음은 ATS를 그대로(=보안) 유지하지만 HTTPS 대신 HTTP를 통해 localhost에 연결할 수 있도록 하는 plist의 스크린샷입니다. Xcode 7.1.1에서 작동합니다.
Apple에 따르면 일반적으로 ATS를 비활성화하면 합당한 이유가 없는 한 앱이 거부됩니다. 그런 경우에도 안전하게 액세스할 수 있는 도메인에 대한 예외를 추가해야 합니다.
Apple에는 사용할 설정을 정확히 알려주는 훌륭한 도구가 있습니다. 터미널에서 다음을 입력하십시오.
/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
nscurl은 이 요청이 실패했는지 확인한 다음 다양한 설정을 시도하고 어떤 설정이 통과하고 무엇을 해야 하는지 정확하게 알려줍니다. 예를 들어 내가 방문하는 일부 타사 URL의 경우 이 명령은 이 사전이 다음을 통과한다고 알려줍니다.
{ NSExceptionDomains = { "www.example.com" = { NSExceptionRequiresForwardSecrecy = false; }; }; }
자신의 사이트와 제어할 수 없는 타사 사이트를 구별하려면 예를 들어 NSThirdPartyExceptionRequiresForwardSecrecy 키를 사용합니다.
Info.plist로 이동
이 기술 노트에 언급된 대로 사용할 설정을 자동으로 파악합니다.
/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
참고: plist의 예외 도메인은 소문자여야 합니다.
예: 설정->공유에서 컴퓨터 이름을 "MyAwesomeMacbook"으로 지정했습니다. 서버(테스트 목적)가 MyAwesomeMacbook.local:3000에서 실행 중이고 앱이 http://MyAwesomeMacbook.local:3000/files ...로 요청을 보내야 하며, plist에 "myawesomemacbook.xml"을 지정해야 합니다. 로컬"을 예외 도메인으로 사용합니다.
--
귀하의 info.plist에는 다음이 포함됩니다...
<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>
사용하다:
사전 유형의 plist 파일에 새 항목 NSAppTransportSecurity 를 추가한 다음 Boolean 유형의 사전에 하위 항목 NSAllowsArbitraryLoads 를 추가하고 부울 값을 YES 로 설정합니다. 이것은 나를 위해 작동합니다.
2015-09-25(2015-09-18 Xcode 업데이트 이후):
비게으른 방법을 사용했지만 작동하지 않았습니다. 다음은 내 시도입니다.
첫 번째,
<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>
그리고 두 번째,
<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>
마지막으로 게으른 방법을 사용했습니다.
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
조금 불안할 수 있지만 다른 솔루션을 찾을 수 없습니다.
swift 4 및 xocde 10에서는 NSAllowsArbitraryLoads를 임의 로드 허용으로 변경합니다. 그래서 그것은 다음과 같이 보일 것입니다 :
<key>App Transport Security Settings</key> <dict> <key>Allow Arbitrary Loads</key><true/> </dict>
거기에 가는 방법을 언급할 가치가 있을 것입니다...
Info.plist는 Main.storyboard 또는 viewController.swift 아래에 있는 파일 중 하나입니다.
처음 클릭하면 일반적으로 테이블 형식이므로 파일을 마우스 오른쪽 버튼으로 클릭하고 '다른 이름으로 열기' 소스 코드를 클릭한 다음 끝에 아래 코드를 추가합니다. 예:
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
바로 위의 코드를 복사하여 붙여넣기
"</dict> </plist>"
마지막에 있는 것입니다.
많은 답변(허용된 답변 포함)에서 앱의 네트워크 통신을 완전히 안전하지 않게 만들라고 말합니다! Allow Arbitrary Loads
를 Yes
(또는 true
)로 설정하여. 이것은 네트워크 요청에 대한 가장 위험한 설정입니다! 테스트 및 임시 목적으로 만 사용됩니다.
WWDC18에서 이 Apple 엔지니어 가 웹 콘텐츠에 대해서도 분명히 말하고 있는 것을 볼 수 있으며 모두 허용하려고 합니다!
Allow Arbitrary Loads
을 NO
설정하세요!!! 네트워킹에 HTTPS
를 사용해야 합니다. 그러나 정말로 할 수 없다면 info.plist
예를 들어 http://google.com
을 사용 중이고 해당 오류가 발생하면 완벽하게 지원하므로 https://google.com
( s 포함 )으로 변경 해야 합니다.
그러나 어떻게든 할 수 없고(백엔드 개발자가 SSL을 지원하도록 설득할 수 없는 경우) 이 보안되지 않은 도메인을 info.plist
추가하십시오(ALL UNSECURE NET에서 사용할 수 있도록 하는 대신!).
Xcode 7.1 업데이트, 문제 27.10.15:
Info.plist의 새 값은 "앱 전송 보안 설정"입니다. 여기에서 이 사전은 다음을 포함해야 합니다.
WKWebView가 항상 흰색이고 아무 것도 로드하지 않는 이유를 찾으려고 여기에 온 사람들을 위해(정확히 여기에 설명된 대로 신속하고 macOS 앱에서 WKWebView가 작동하도록 하는 방법 ):
위의 모든 로켓 과학이 효과가 없다면 명백한 샌드박스 설정을 확인하십시오.
swift와 cocoa에 익숙하지 않지만 프로그래밍에 꽤 경험이 있어 이 솔루션을 찾는 데 약 20시간을 소비했습니다. 수십 개의 힙스터-iOS-자습서나 사과 기조 연설 중 어느 것도 이 작은 확인란에 대해 언급하지 않습니다.
기본적으로 iOS는 HTTPS API만 허용합니다. HTTP는 안전하지 않으므로 앱 전송 보안을 비활성화해야 합니다. ATS를 비활성화하는 두 가지 방법이 있습니다.
1. 프로젝트 info.plist에 소스 코드를 추가하고 루트 태그에 다음 코드를 추가합니다.
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
2. 프로젝트 정보 사용.
왼쪽 창의 프로젝트에서 프로젝트를 클릭하고 대상으로 프로젝트를 선택하고 정보 탭을 선택합니다. 다음과 같은 구조로 사전을 추가해야 합니다.
NSExceptionDomains
사용하면 http
통해 외부 도메인에서 js
파일)를 로드할 수 있으므로 효과를 동시에 적용하지 못할 수 있습니다. NSExceptionDomains
에도 이러한 외부 도메인을 추가하여 해결할 수 있습니다.
로드할 수 없는 리소스를 검사하려면 원격 디버깅을 사용해 보십시오. 다음은 튜토리얼입니다: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/
Cordova의 경우 ios.json에 추가하려면 다음을 수행하십시오.
"NSAppTransportSecurity": [ { "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>" } ]
그리고 다음 안에 있어야 합니다.
"*-Info.plist": { "parents": { } }
많은 사람들이 언급했듯이 이것은 iOS 9.0과 함께 제공되는 기능 문제입니다. 그들은 App Transport Security라는 것을 추가했고, 나도 그것이 내 앱을 망가뜨렸을 때 짜증이 났다.
.plist 파일의 NSAppTransportSecurity 사전 아래에서 NSAllowsArbitraryLoads 키를 사용하여 붕대를 감을 수 있지만 궁극적으로 HTTPS:// 접두사를 형성하기 위해 URL을 형성하는 코드를 다시 작성해야 합니다.
Apple은 iOS 9.0에서 NSUrlConnection 클래스를 다시 작성했습니다. NSURLConnection 에서 이에 대해 읽을 수 있습니다.
그렇지 않으면 올바른 솔루션을 구현할 시간이 있을 때까지 iOS 9.0에서 물러나야 할 수도 있습니다.
출처 : http:www.stackoverflow.com/questions/31254725/transport-security-has-blocked-a-cleartext-http
Python에서 유형을 확인하는 표준 방법은 무엇입니까? (0) | 2022.02.27 |
---|---|
YAML에서 주석을 어떻게 차단합니까? (0) | 2022.02.27 |
개체 이름 앞에 단일 및 이중 밑줄의 의미는 무엇입니까? (0) | 2022.02.27 |
Rails: Ruby on Rails 마이그레이션에서 데이터베이스 열의 이름을 바꾸려면 어떻게 해야 합니까? (0) | 2022.02.27 |
잠재적으로 위험한 Request.Form 값이 클라이언트에서 감지되었습니다. (0) | 2022.02.27 |