ATS(App Transport Security)는 HTTP 연결의 기본 보안에 대한 변경 사항에 대한 설명이다.
ATS 설정을 통해 네트워크 보안 레벨을 설정할 수 있다. ATS는 기본적으로 보안성을 높이기 위해서 안전하지 않은 연결은 허용하지 않는다.
☑️HTTP/ HTTPS
HTTP로 연결하면 모든 데이터가 일반 텍스트로 전달된다. 비밀번호와 같이 보안이 중요한 데이터가 유출될 위험이 높다.
반면 HTTPS 연결 시에는 통신 시에 모든 데이터를 암호화해서 전달한다.
그렇기 때문에 Apple 기본 보안 설정에서는 HTTP로 연결을 막고 있다. 그래서 HTTP 연결이 필요한 경우 ATS 설정을 변경해주어야 한다.
ATS 설정
NSAppTransportSecurity Setting에서 가능한 전체 키와 구조
NSAppTransportSecurity : Dictionary {
NSAllowsArbitraryLoads : Boolean // ATS 활성화 상태
NSAllowsArbitraryLoadsForMedia : Boolean //YES: 미디어 요청시 HTTP 허용
NSAllowsArbitraryLoadsInWebContent : Boolean // YES: 웹뷰에서 HTTP 허용
NSAllowsLocalNetworking : Boolean // Local network
NSExceptionDomains : Dictionary {
<domain-name-string> : Dictionary {
NSIncludesSubdomains : Boolean
NSExceptionAllowsInsecureHTTPLoads : Boolean // YES: HTTP 연결 허용
NSExceptionMinimumTLSVersion : String
NSExceptionRequiresForwardSecrecy : Boolean // Default value is YES
NSRequiresCertificateTransparency : Boolean
}
}
}
Info.plist에서 키 설정을 해준다.
NSAllowsArbitraryLoads 키의 기본 값은 NO
YES로 설정하면 ATS가 제공하는 보안을 무력화시킨다. 모든 HTTP 연결 요청을 허용하게 되는 것이다.
NSAllowsArbitraryLoads : Boolean // ATS 활성화 상태
NSAllowsArbitraryLoadsForMedia : Boolean //YES: 미디어 요청 시 HTTP 허용 NSAllowsArbitraryLoadsInWebContent : Boolean // YES: 웹뷰에서 HTTP 허용
세 키를 YES로 설정 시 보안을 최저 수준으로 설정하는 것이기 때문에 최후의 보류로 사용해야 한다.
개별 예외 도메인 설정
HTTP 연결이 필요한 경우 전역 ATS 설정을 하는 것보다 개별 도메인에 설정을 해주는 것이 보안상 더 좋은 방법이다.
[NSExceptionDomains]
모바일 환경과 웹 환경에서 url 주소가 다르기 때문에 서브 도메인 허용하는 설정을 추가해줘야 한다. 그렇지 않으면 도메인 에러가 발생하는 것을 확인할 수 있다.
서브 도메인 허용하기
💡 ATS 설정 키를 YES로 설정하면 앱 심사 시 리젝이 될 확률이 크므로 최대한 변경하지 않고 기본 값을 그대로 사용하는 것이 좋다.
Apple Developer Documentation
developer.apple.com
NSAppTransportSecurity Setting에서 가능한 전체 키와 구조
Cocoa Keys
Cocoa Keys Cocoa and Cocoa Touch are the environments used to define apps that run in macOS, iOS, tvOS, and watchOS. The keys associated with the Cocoa environments provide support for Interface Builder nib files and provide support for other user-facing f
developer.apple.com
'개발 > iOS' 카테고리의 다른 글
[iOS] UiCollectionView Header 동적으로 높이 조절하기 (0) | 2023.02.03 |
---|---|
[iOS/Swift] JSON Encoding(인코딩) & Decoding(디코딩) (0) | 2023.01.26 |
[iOS] 웹뷰를 활용해 HTML 콘텐츠 화면에 출력하기 (0) | 2023.01.26 |
[iOS][Swift] 세자리 콤마 넣기 (0) | 2023.01.25 |
[iOS] google map marker custom (구글맵 마커 커스텀하기) (0) | 2023.01.20 |