programing

전송 보안이 일반 텍스트 HTTP를 차단했습니다.

closeapi 2023. 6. 15. 21:52
반응형

전송 보안이 일반 텍스트 HTTP를 차단했습니다.

어떤 설정을 입력해야 합니까?info.plist다음 오류 메시지에 따라 HTTP 모드를 활성화하시겠습니까?

일반 텍스트 HTTP(http://) 리소스 로드가 안전하지 않으므로 전송 보안이 차단되었습니다.앱의 Info.plist 파일을 통해 임시 예외를 구성할 수 있습니다.

Xcode

이 내도이라고 합니다.example.com.

NSAppTransport 보안 사용:

Enter image description here

info.plist 파일의 NSAppTransportSecurity 사전에서 NSAlowsArbitraryLoads 키를 YES로 설정해야 합니다.

Plist configuration

시각적으로 설정은 다음과 같습니다.

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI

Application Transport Security 포럼 게시물을 참조하십시오.

예를 들어 다음과 같은 특정 도메인을 추가할 수 있습니다.

<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.plistXML 파일이므로 이 코드를 파일 내의 어느 곳에나 배치할 수 있습니다.

Xcode 8.0+ 및 Swift 2.2+ 또는 목표 C를 사용하는 경우:

Enter image description here

사이트에 대한 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 없이 일부 도메인에 연결할 수 있습니다.

시각적으로 다음과 같습니다.

Info.plist structure

이것은 목록에 이를 추가하기 위한 빠른 해결 방법이지만 권장되지는 않습니다.

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

즉, (Apple 문서에 따르면) 다음을 의미합니다.

임의 로드 NSA 파일
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/>

지정된 주소의 하위 도메인에 대해 안전하지 않은 연결을 허용하려는 경우.

가장 좋은 방법은 모든 임의 로드를 차단하고(false로 설정) 예외를 추가하여 우리가 알고 있는 주소만 허용하는 것입니다.

관심있는 독자를 위한

2018 업데이트:

Apple은 이 기능을 끄도록 권장하지 않습니다. 더 많은 정보는 207 세션 WWDC 2018에서 확인할 수 있으며 보안과 관련하여 더 많은 것을 설명할 수 있습니다.

역사적인 이유와 개발 단계를 위해 원래의 답을 남깁니다.

이 문제를 해결하는 방법 외에도 이러한 문제가 발생하는 이유에 대한 자세한 내용을 알고 싶다면 아래를 참조하십시오.

iOS 9의 도입으로 앱과 웹 서비스 간의 연결 보안을 향상시키려면 앱과 웹 서비스 간의 보안 연결이 모범 사례를 따라야 합니다.모범 사례 동작은 App Transport Security를 통해 다음을 수행합니다.

  • 우발적인 공개를 방지합니다.
  • 안전한 기본 동작을 제공합니다.

App Transport Security Technote에서 설명한 것처럼 웹 서비스와 통신할 때 App Transport Security에는 다음과 같은 요구 사항과 동작이 있습니다.

  • 서버는 TLS(Transport Layer Security) 프로토콜 버전 1.2 이상을 지원해야 합니다.
  • 연결 암호는 전달 암호를 제공하는 암호로 제한됩니다(아래 암호 목록 참조).
  • 인증서는 2048비트 이상의 RSA 키 또는 256비트 이상의 ECC(Eliptic-Curve) 키를 사용하여 SHA256 이상의 서명 해시 알고리즘을 사용하여 서명해야 합니다.
  • 인증서가 잘못되면 하드 오류가 발생하고 연결이 없습니다.

즉, 웹 서비스 요청은 a) HTTPS를 사용하고 b) TLS v1.2를 사용하여 암호화해야 합니다.

게시물에서 처럼 앱 트랜스포트 시큐리티에서 앱 트랜스포트 이할 수 .Info.plist사용자의 앱.


재의하다추합니다야해를 .NSAppTransportSecurity>NSExceptionDomains사전성의 사전 Info.plist다음 웹 다그런추도에다니합가에 합니다.NSExceptionDomains사전.

예를 들어 www.yourwebservicehost.com 호스트의 웹 서비스에 대한 App Transport Security 동작을 무시하려면 다음을 수행합니다.

  1. Xcode로 앱을 엽니다.

  2. » Info.plistProject Navigator의 파일과 "오른쪽 마우스"를 클릭하고 Open As > Source Code 메뉴 옵션을 선택합니다.오른쪽 창에 속성 목록 파일이 나타납니다.

  3. 을 주 첫 번째 속성 블록 ).<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.

위에서 언급한 키에 대한 자세한 내용은 이미 언급한 기술 노트를 참조하십시오.

저는 목록을 직접 편집하는 것을 좋아하지 않습니다.GUI를 사용하여 목록에 쉽게 추가할 수 있습니다.

  • 왼쪽의 네비게이터에서 Info.plist를 클릭합니다.
  • 이제 기본 영역의 데이터를 변경합니다.

    • 마지막 줄에 +를 추가합니다.
    • 그룹 이름 입력:앱 전송 보안 설정
    • 그룹을 마우스 오른쪽 버튼으로 클릭하고 선택합니다.Add Row
    • 임의 로드 허용 입력
    • 오른쪽의 값을 YES로 설정합니다.

Example

Apple Document 1

Apple Document 2

이를 위한 두 가지 솔루션이 있습니다.

솔루션 1:

  1. Info.plist '가 있는 합니다.NSAppTransportSecurity'
  2. 키를 합니다.'Allow Arbitrary Loads'

Plist아래 이미지와 같이 구조가 나타나야 합니다.

Solution 1

솔루션 2:

  1. Info.plist '가 있는 합니다.NSAppTransportSecurity'
  2. 에 '가인 ' 키를 사용하여 다른 합니다.NSExceptionDomains'
  3. 를 추가'MyDomainName.com'NS 사전
  4. 가인 ' 인 를 추가합니다.NSIncludesSubdomainsBoolean이 및값설로 됩니다.YES
  5. 가인 ' 인 를 추가합니다.NSTemporaryExceptionAllowsInsecureHTTPLoadsBoolean이 및값설로 됩니다.YES

Plist아래 이미지와 같이 구조가 나타나야 합니다.

Solution 2

솔루션 1은 모든 안전하지 않은 HTTP 연결을 허용하는 반면, 솔루션 2는 선택한 도메인만 허용하기 때문에 선호됩니다.

전송 보안은 iOS 9.0 이상에서 사용할 수 있습니다.응용 프로그램 내부에서 WS를 호출할 때 다음 경고가 표시될 수 있습니다.

안전하지 않으므로 Application Transport Security에서 일반 텍스트 HTTP(http://) 리소스 로드를 차단했습니다.앱의 Info.plist 파일을 통해 임시 예외를 구성할 수 있습니다.

다음을 Info.plist에 추가하면 ATS가 비활성화됩니다.

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

⛔️ 나쁜 관행을 사용하지 마세요!

많은 답변(승인된 답변 포함)은 앱의 네트워크 통신을 완전히 보안되지 않도록 설정합니다!Allow Arbitrary LoadsYes(또는)true) 네트워크 요청에 가장 위험한 설정입니다!그리고 그것은 오직 시험과 임시적인 목적을 위한 입니다.

여기 WWDC18에서 Apple 엔지니어가 웹 콘텐츠에 대해서도 분명히 이렇게 말하는 것을 볼 수 있으며 여러분은 이 모든 것을 허용하려고 노력하고 있습니다!enter image description here


✅ 트세Allow Arbitrary LoadsNO!!!

항사용합니다를 해야 합니다.HTTPS네트워킹 관련 정보를 제공합니다.하지만 만약 정말로 할 수 없다면, 단지 예외를 추가하세요.info.plist

를 들어 예를들다사는경우용하을음어▁you를 한다면,http://google.com오류가 발생하면 다음으로 변경해야 합니다.https://google.com(s) 완벽하게 지지하기 때문에.

하지만 어떻게든 할 수 없다면(그리고 백엔드 개발자들이 SSL을 지원하도록 설득할 수 없다면) 이 보안되지 않은 도메인을info.plist(모든 UNSECURE NET에서 사용할 수 있도록 하는 대신!)

Expception

개발 예제

다음은 ATS를 그대로 유지(=보안)하지만 HTTPS 대신 HTTP통해 localhost에 연결할 수 있는 plist의 스크린샷입니다.Xcode 7.1.1에서 작동합니다.

Enter image description here

Apple에 따르면, 일반적으로 ATS를 비활성화하면 정당한 이유가 없는 한 앱 거부가 발생합니다.그래도 안전하게 액세스할 수 있는 도메인에 대한 예외를 추가해야 합니다.

Apple에는 사용할 설정을 정확하게 알려주는 우수한 도구가 있습니다.터미널에 다음을 입력합니다.

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

그리고 nscurl은 이 요청이 실패하는지 확인한 다음 다양한 설정을 시도하고 어떤 설정이 통과하고 무엇을 해야 하는지 정확하게 알려줍니다.예를 들어, 내가 방문하는 일부 타사 URL의 경우, 이 명령은 이 사전이 다음을 통과한다는 것을 알려주었습니다.

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

사용자 자신의 사이트와 사용자가 제어할 수 없는 타사 사이트를 구분하려면 예를 들어 키 NSTThirdPartyExceptionRequiresForwardSecurity를 사용합니다.

Info.plist로 이동합니다.

  1. 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 행 추가를 클릭합니다.
  2. 키 이름 아래에 NSAppTransportSecurity로 입력
  3. 예외 도메인을 선택하고 이 도메인에 새 항목 추가
  4. 액세스해야 하는 도메인 이름 기록
  5. 도메인 유형을 문자열에서 사전으로 변경하고 새 항목 추가
  6. 엔템포털예외.안전하지 않음 허용HTTPLoads. 참 값을 가진 부울이 됩니다.Look at the picture to follow it correctly

기술 노트에 언급된 대로 사용할 설정을 자동으로 지정할 수 있습니다.

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

참고: 목록의 예외 도메인은 소문자로 표시해야 합니다.

예: 설정->공유에서 컴퓨터 이름을 "MyAwesome Macbook"으로 지정했습니다. 서버(테스트용)가 MyAwesome Macbook.local:3000에서 실행되고 있으며 앱에서 http://MyAwesome Macbook.local:3000/files...로 요청을 보내야 합니다. 목록에서 "Myawesome Macbook.local"을 예외 도메인으로 지정해야 합니다.

--

당신의 정보 목록에는...

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

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>

조금 불안할 수도 있지만, 다른 해결책을 찾을 수 없었습니다.

사용:

PList Screenshot to understand better

유형이 Dictionary인 plist 파일에 새 항목 NSAppTransportSecurity를 추가한 다음 부울 유형 사전에 NSLowsArbitraryLoads 하위 항목을 추가하고 부울 을 YES로 설정합니다.이것은 나에게 효과가 있습니다.

swift 4 및 xocde 10에서는 NSA가 임의 로드를 허용하도록 임의 로드를 변경합니다.그래서 이것은 다음과 같이 될 것입니다:

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

마지막에 있는 것입니다.

어떻게 고칠까요?

enter image description here

다음은 이를 해결하는 방법은 다음과 같습니다.

enter image description here enter image description here enter image description here enter image description here enter image description here

Xcode 7.1에 대한 업데이트, 문제 27.10.15:

Info.plist의 새 값은 "App Transport Security Settings"입니다.여기서부터 이 사전에는 다음이 포함되어야 합니다.

  • 임의 로드 허용 = YES
  • 예외 도메인(여기에 http 도메인 삽입)

WKWebView가 항상 흰색이고 아무것도 로드되지 않는 이유를 찾으려는 사람들(여기에 설명된 바와 같이 WKWebView가 MacOS 앱에서 신속하게 작동하도록 하려면 어떻게 해야 합니까?):

위의 모든 로켓 과학이 작동하지 않으면 샌드박스 설정을 확인하십시오.

sandbox settings]

저는 swift와 코코아를 처음 접하지만 프로그래밍에 꽤 경험이 있기 때문에 이 해결책을 찾기 위해 약 20시간을 보냈습니다.수십 개의 힙스터 iOS 튜토리얼이나 애플 키노트 중 어느 것도 이 작은 확인란을 언급하지 않습니다.

기본적으로 iOS는 HTTPS API만 허용합니다.HTTP가 안전하지 않기 때문에 앱 전송 보안을 해제해야 합니다.ATS를 비활성화하는 두 가지 방법이 있습니다.

project info.plist에 소스 코드를 추가하고 루트 태그에 다음 코드를 추가합니다.

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

프로젝트 정보를 사용하는 중입니다.

왼쪽 창에서 프로젝트를 클릭하고 대상으로 프로젝트를 선택한 다음 정보 탭을 선택합니다.당신은 다음 구조로 사전을 추가해야 합니다.

enter image description here

드디어!!!해결된 앱 전송 보안 **

  1. Follow the follow the screen shot. Do it in Targets info Section.

enter image description here

Swift 5우리는 이 문제를 극복하는 두 가지 방법이 있습니다.우리는 추가할 필요가 있습니다.NSAppTransportSecurityinfo.plist

나는 그것을 줍니다.info.plist

the 첫는추니다입가입니다.NSAppTransportSecurity->NSAllowsArbitraryLoadsinfo.plist.

enter image description here

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
    </dict>
</dict>
</plist>

또 다른 방법은 Add theNSAppTransportSecurity->NSExceptionDomainsinfo.plist할 수 있는 합니다.NSIncludesSubdomains및되지 않은 로드 허용 HTTP 로드 허용(NSExceptionAllowsInsecureHTTPLoads)

enter image description here

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>www.7timer.info</key>
        <dict>
          <key>NSIncludesSubdomains</key>
          <true/>
          <key>NSExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict>
  </dict>
</plist>

용사를 합니다.NSExceptionDomains할 수 경우 리소스가 로드될 수 대 사 트 가 예 리 를 수 때 영 동 에 시 적 용 할 수 없 음 을 향 에 문 기 있 상 이 할 드 스 :js를 통한 http을 이외도을에해수있결다습에 될 수 .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과 함께 제공되는 기능 문제입니다.그들은 앱 전송 보안이라는 것을 추가했고, 나도 그것이 내 앱을 깨트렸을 때 짜증이 났습니다.

.plist 파일의 NSappTransportSecurity 사전 아래에 있는 NSSlowsArbitraryLoads 키를 YES로 반창고를 붙일 수 있지만, 궁극적으로 URL을 구성하는 코드를 HTTPS:// 접두사로 다시 작성해야 합니다.

Apple은 iOS 9.0에서 NSUrlConnection 클래스를 다시 작성했습니다.NSURL 연결에서 이에 대한 내용을 읽을 수 있습니다.

그렇지 않으면 올바른 솔루션을 구현할 시간이 있을 때까지 iOS 9.0에서 손을 떼야 할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/31254725/transport-security-has-blocked-a-cleartext-http

반응형