본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin] Android 12 / SameSite=None; Secure관련

by MinChan-Youn 2023. 4. 12.

Android 12

안녕하세요~ 챠니입니다! :)

Android 타겟을 12로 적용하면서 WebView에서 발생되었던 이슈에 대해서 한번 알아보겠습니다.

 

    Android 12에서 무슨일이?

    요즘은 보통 하이브리드앱을 많이 선호하면서 네이티브에서는 보통 메인을 WebView로 띄워주는 경우가 많은데요 거기에서 2020년도에서 많은 이슈가 있었던 SameSite속성에 관련된 이야기입니다.
     
    결론적으로 Android 12를 타겟으로 하는 Android WebView에서는 SameSite 속성이 기본값이 "None"에서 "Lax"로 설정됩니다.
    SameSite 속성이 강화되면서 여러가지 부분에서 이슈가 발생할것이라고 생각됩니다.
     
    여러가지 Google, Android에서는 다음과 같이 이야기하고있습니다.

     

    크로스 사이트 쿠키를 관리하는 경우 SameSite=None; Secure 설정을 쿠키에 적용해야 합니다. 대부분의 개발자가 간단하게 구현할 수 있지만 다음과 같은 복잡성과 특수 사례를 파악하기 위해 바로 테스트를 시작하는 것이 좋습니다.
    • 일부 언어와 라이브러리는 아직 None 값을 지원하지 않으므로 개발자가 쿠키 헤더를 직접 설정해야 합니다. 이 GitHub 저장소에서는 다양한 언어, 라이브러리, 프레임워크로 SameSite=None; Secure를 구현할 수 있도록 안내합니다.
    • 일부 브라우저(예: Chrome, Safari, UC Browser의 일부 버전)는 의도치 않은 방식으로 None 값을 처리하여 개발자가 클라이언트에 예외를 코딩해야 할 수도 있습니다. 여기에는 이전 버전의 Chrome에서 제공하는 Android WebView가 포함됩니다. 다음은 알려진 비호환 클라이언트의 목록입니다.
    • 이 새로운 모델이 나중까지 Android WebView에서 적용되지 않더라도 앱 개발자는 HTTP(S) 헤더를 통해 액세스하는 쿠키와 Android WebView의 CookieManager API를 통해 액세스하는 쿠키에 None 값과 호환되는 Chrome 버전에 따라 Android WebViews의 적절한 SameSite cookie 설정을 선언하는 것이 좋습니다.
    • 기업 IT 관리자는 싱글 사인온(SSO) 또는 내부 애플리케이션과 같은 일부 서비스가 2월 출시에 맞춰 준비되지 않을 경우 Chrome 브라우저를 일시적으로 레거시 버전으로 되돌리도록 특별 정책을 시행해야 할 수도 있습니다.
    • 자사 컨텍스트와 타사 컨텍스트 모두에 액세스하는 쿠키가 있는 경우 별도의 쿠키를 사용하면 자사 컨텍스트에서 SameSite=Lax의 보안 이점을 얻을 수 있습니다.
    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

     

    새로운 SameSite=None; Secure 쿠키 설정에 대비  |  Google 검색 센터 블로그  |  Google Developers

    2020년 1월 16일 목요일 이 게시물은 Chromium 개발자 블로그의 교차 게시물로, Chrome 변경사항이 향후 웹사이트 작동에 영향을 미치는 방식과 관련이 있습니다. 지난 5월에 Chrome은 새로운 쿠키 분류

    developers.google.com

     

    * https://lanicc.medium.com/android-12-%ED%83%80%EA%B2%9F-%EC%A0%81%EC%9A%A9-%ED%9B%84%EA%B8%B0-81b6ddfe863

     

    Android 12 타겟 적용 후기

    안녕하세요 라닉입니다. 😀 이번 포스팅에서는 내부 사정으로 인해 개발내역에 없던 targetSDK을  30(안드로이드 11)에서 31(안드로이드 12)로 올리게 되면서 생긴 이슈와 해결한 방법까지 같이 공

    lanicc.medium.com

     

    * https://okky.kr/articles/670238

     

    OKKY - Chrome, 2020년 2월 브라우저 쿠키 정책 변경

    준비 방법과 알려진 복잡성교차 사이트 쿠키를 관리하는 경우 SameSite=None; Secure 설정을 쿠키에 적용해야 합니다. 대부분의 개발자에게 구현이 간단해야 하겠지만, 다음과 같은 복잡성과 특별한

    okky.kr

     

     

     

     

    질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!

    응원의 댓글은 저에게 큰 힘이 된답니다! :)

    즐거운 하루되세요!

     

    깃허브 보러 놀러오세요 👇 (맞팔환영)

    https://github.com/younminchan

     

    younminchan - Overview

    안드로이드 2년차 개발자 •⚽️/🎤/🥁/🖥/🏃‍♂️/🚴‍♂️/🤟 TechBlog⬇️ minchanyoun.tistory.com - younminchan

    github.com