관리 메뉴

ARTIFEX ;)

iOS App에서 HTTP 통신 허용하기 본문

# Security/WEB, APP Vulnerabilities

iOS App에서 HTTP 통신 허용하기

Artifex_Ethan_ 2024. 4. 1. 16:18
반응형

ios9 이후부터는 HTTP가아닌 HTTPS로의 접근만 허용하였기 때문에 HTTP로 접근 하기위해서는 설정이 필요하다.
자세히 설명하자면 Apple 에서 앱 자체의 보안성을 위해 ATS(App Transport Security)라는 정책을 통하여 iOS9 버전 이후 부터는 보안에 취약한 네트워크를 차단시킨다.

보통은 앱 개발 테스트 시 HTTP 서버와 통신 시도를 하면 에러가 나오는 경우인데
앱 분석 등을 진행하다가 발생할 수 있기에 해당 에러에 관한 글을 정리하려고 한다.
(사실 오래전에 포스트한 글이지만 타 플랫폼에 있어서 옮길 겸 재정리)

앱 개발적인 부분이 많으므로 필요한 부분만 참고하면 될 듯 하다.

Apple 측에선 앱 자체의 보안성을 위해 ATS(Apple Transport Security)라는 정책을 설정하여 기본적으로 https 통신을 유도한다. → HTTP 자체를 Deny.

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

http 테스트를 위해 info.plist에서 ATS부분을 추가해주어야 함.

NSAppTransportSecurity의 NSAllowsArbitraryLoads 값을 true로 지정한다.

이후 앱을 빌드하면 문제없이 http 서버와 잘 통신된다. 실제 배포에선 http 사용이 없다면, 허용하지 않는게 맞을 것 같고, 보안적인 관점에서도 궁극적으로 저 옵션을 안키도록 https를 기본으로 가져가고 사용하는 구간이 발견되면 리포팅 하는게 좋을 듯하다.

다만, 보안상 모든 사이트에 대한 HTTP를 오픈하는 것은 비추천함으로 특정 사이트만 오픈을 위해 아래와 같은 방식으로 코드 수정을 권고

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>도메인주소(www.naver.com)</key>
            <dict>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

 

 

반응형