안녕하세요~ 챠니입니다! :)
Android 타겟을 12로 적용하면서 WebView에서 발생되었던 이슈에 대해서 한번 알아보겠습니다.
Android 12에서 무슨일이?
요즘은 보통 하이브리드앱을 많이 선호하면서 네이티브에서는 보통 메인을 WebView로 띄워주는 경우가 많은데요 거기에서 2020년도에서 많은 이슈가 있었던 SameSite속성에 관련된 이야기입니다.
결론적으로 Android 12를 타겟으로 하는 Android WebView에서는 SameSite 속성이 기본값이 "None"에서 "Lax"로 설정됩니다.
SameSite 속성이 강화되면서 여러가지 부분에서 이슈가 발생할것이라고 생각됩니다.
여러가지 Google, Android에서는 다음과 같이 이야기하고있습니다.
크로스 사이트 쿠키를 관리하는 경우 SameSite=None; Secure 설정을 쿠키에 적용해야 합니다. 대부분의 개발자가 간단하게 구현할 수 있지만 다음과 같은 복잡성과 특수 사례를 파악하기 위해 바로 테스트를 시작하는 것이 좋습니다.
|
WebView의 최신 SameSite 쿠키 Android의 WebView 구성요소는 Google의 Chrome 브라우저를 지원하는 오픈소스 프로젝트인 Chromium에 기반합니다. Chromium은 타사 쿠키 처리에 변경사항을 도입하여 보안과 개인 정보 보호를 강화하고 사용자에게는 더 높은 투명성과 더 많은 제어 기능을 제공했습니다. Android 12부터 이러한 변경사항은 앱에서 Android 12(API 수준 31) 이상을 타겟팅할 때 WebView에도 포함됩니다. SameSite 속성이 없는 쿠키는 SameSite=Lax로 간주됩니다. SameSite=None이 있는 쿠키는 Secure 속성도 지정해야 합니다. 즉, 보안 컨텍스트가 필요하고 HTTPS를 통해 전송되어야 합니다. 사이트의 HTTP 버전과 HTTPS 버전 간의 링크는 이제 교차 사이트 요청으로 간주되므로 쿠키가 SameSite=None; Secure로 적절하게 표시되지 않는 한 전송되지 않습니다. https://developer.android.com/about/versions/12/behavior-changes-12?hl=ko |
SameSite 적용방법 & ChatGPT 답변
다음은 요즘 많이 사용하는 ChatGPT에서 "Android SameSite"관련된 내용에 대한 답변을 받아 보았습니다.
SameSite는 쿠키 보안 기능 중 하나로, 쿠키를 전송하는 도메인과 쿠키를 소유하고 있는 도메인이 같은 경우에만 쿠키를 전송하도록 제한하는 기능입니다. 이를 통해 CSRF(Cross-Site Request Forgery)와 같은 공격을 방지할 수 있습니다.
Android 애플리케이션에서 SameSite를 적용하려면 다음과 같은 방법을 사용할 수 있습니다.
HttpUrlConnection을 사용하는 경우
HttpUrlConnection에서 SameSite를 적용하려면 쿠키의 속성 중 하나로 SameSite를 설정하면 됩니다. 다음과 같이 코드를 작성할 수 있습니다.
//kotlin
val url = URL("https://example.com")
val conn = url.openConnection() as HttpURLConnection
conn.setRequestProperty("Cookie", "mycookie=value; SameSite=None; Secure")
//Java
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Cookie", "mycookie=value; SameSite=None; Secure" );
위의 예시에서 SameSite=Strict는 SameSite를 적용하는 방법 중 하나입니다. 이외에도 Lax, None 등의 옵션이 있습니다.
SameSite=None속성을 사용하는 경우에는 Secure속성을 꼭 같이 추가해야합니다!
OkHttp를 사용하는 경우
OkHttp에서는 4.3.0 버전부터 SameSite를 지원하며, CookieJar 인터페이스를 구현하여 SameSite를 적용할 수 있습니다. 다음과 같이 코드를 작성할 수 있습니다.
//kotlin
val cookieManager = CookieManager()
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL)
val cookieJar = JavaNetCookieJar(cookieManager)
val client = OkHttpClient.Builder()
.cookieJar(cookieJar)
.build()
//java
CookieJar cookieJar = new JavaNetCookieJar(cookieManager);
OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
SameSite를 적용함으로써 CSRF 공격을 방지할 수 있지만, 일부 브라우저에서는 SameSite를 지원하지 않아서 쿠키 전송이 실패하는 경우가 있습니다. 이러한 문제를 방지하기 위해 SameSite를 지원하지 않는 브라우저에서는 다른 보안 조치를 취해야 할 수 있습니다.
이러한 방식으로 SameSite를 적용하면 Android 애플리케이션에서 SameSite 보안 기능을 사용할 수 있습니다.
참고문서 & 소스코드
* https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure?hl=ko
* https://okky.kr/articles/670238
질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!
응원의 댓글은 저에게 큰 힘이 된답니다! :)
즐거운 하루되세요!
깃허브 보러 놀러오세요 👇 (맞팔환영)
https://github.com/younminchan
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Android][kotlin] Android <-> Google Login 연동방법 (0) | 2023.05.20 |
---|---|
[Android] 갤럭시 폴드 폰 대응(Fold) (0) | 2023.05.11 |
[Android] This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, please retry with version 2021.2.1 or newer. 해결방법 (0) | 2023.05.11 |
[Android]uses-feature설명 및 Google Play검색 안되는 현상 해결방법 (2) | 2023.05.09 |
[Android] APK파일 이름 변경하기 (0) | 2023.03.15 |
[Android][kotlin] User-Agent Mobile 인식하게 만들기(ex. 갤럭시 폴드 카카오톡 공유하기 대응) (0) | 2023.03.13 |
[Android] Button 그림자 제거 방법 (0) | 2023.02.14 |
[Android][kotlin] registerForActivityResult 사용방법 (0) | 2023.02.02 |