SPRING
2021.04.29 / 14:42

Å©·Ò¿¡¼­ Cookie ÀÇ °ªÀ» ÀÒ¾î¹ö¸°´Ù (SameSite ¼³Á¤À¸·Î Å©·Ò80¹öÀü ´ëÀÀ!)

ÇϾá¼Ò
Ãßõ ¼ö 265

2020³â 2¿ù 4ÀÏ ±¸±Û Å©·ÒÀÌ 80¹öÀüÀ¸·Î ¾÷µ¥ÀÌÆ® µÇ¸é¼­ »õ·Î¿î ÄíÅ°Á¤Ã¥ÀÌ Àû¿ëµÇ¾î ÄíÅ°ÀÇ SameSite ¼Ó¼ºÀÇ ±âº»°ªÀÌ "None" -> "Lax"·Î º¯°æµÇ¾ú½À´Ï´Ù.

º¯°æµÊ¿¡µû¶ó Ÿµµ¸ÞÀΰ£ÀÇ Åë½Å¿¡¼­ ÄíÅ°°ªÀ» ÀÒ¾î¹ö¸®´Â Çö»óÀÌ ¹ß»ýÇϸç, ÄíÅ°°ªÀ¸·Î ÆäÀÌÁöó¸®ÇÏ´Â »çÀÌÆ®ÀÇ °æ¿ì¿¡´Â À̽´°¡ »ý±æ ¼ö ÀÖ½À´Ï´Ù.

 

 

SameSite ¼³Á¤Çϱâ

SameSite ¼Ó¼ºÀ» º¯°æÇÏ´Â ¹æ¹ýÀº ÄíÅ°¸¦ »ý¼ºÇÏ´Â ½ÃÁ¡ºÎÅÍ ¼³Á¤ÇØÁְųª ÇÊÅÍ µîÀ» ÀÌ¿ëÇÏ¿© ±âÁ¸ ÄíÅ°¿¡ none ¼Ó¼ºÀ» Ãß°¡ÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.

 

 

1. JavaScript

document.cookie = "safeCookie1foo; SameSite=Lax";

document.cookie = "safeCookie1foo";

document.cookie = "crossCookie=bar; SameSite=None; Secure";

SameSite ¼Ó¼ºÀ» Lax·Î ¸í½ÃÇÑ safeCookie1¿Í ¸í½ÃÇÏÁö ¾ÊÀº safeCookie2´Â Å©·Ò 80ÀÌ»óºÎÅÍ Default Lax °ªÀ¸·Î Àû¿ëµÇ´Â°ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÁÖÀÇÇÏ¼Å¾ß ÇÒ Á¡Àº SameSite¼Ó¼ºÀ» NoneÀ¸·Î ¼³Á¤ÇÒ °æ¿ì Secure¼Ó¼ºÀ» ÇÔ²² Ãß°¡ÇØ ÁÖ¼Å¾ß ÇÕ´Ï´Ù. Secure ¼Ó¼ºÀ» Ãß°¡µÈ ÄíÅ°´Â HTTPSÇÁ·ÎÅäÄÝ¿¡¼­¸¸ Àü¼ÛÀÌ °¡´ÉÇϸç SameSite°¡ NoneÀ̾ Secure ¼Ó¼ºÀÌ ¾øÀ¸¸é None¼Ó¼ºÀÌ Àû¿ëÀÌ µÇÁö ¾Ê¾Æ ÄíÅ°°ªÀ» ¿©ÀüÈ÷ »ç¿ëÇÏÁö ¸øÇÕ´Ï´Ù.

 

 

2. Java Application

response.setHeader("Set-Cookie", "Test1=TestCookieValue1; Secure; SameSite=None");

response.setHeader("Set-Cookie", "Test1=TestCookieValue2; Secure; SameSite=None");

response.setHeader("Set-Cookie", "Test1=TestCookieValue3; Secure; SameSite=None");

 

 

3. Filter or Interceptor

¼Ò½º»ó¿¡¼­ 󸮰¡ Èûµç °æ¿ì¿¡ ÇÊÅͳª ÀÎÅͼÁÅÍ µîÀ» ÅëÇØ response¸¦ °¡·Îä¼­ SameSite ¼Ó¼ºÀ» Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

private void addSameSite(HttpServletResponse response, String sameSite) {
    Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE);
    boolean firstHeader = true;
    for(String header : headers) {
        if(firstHeader) {
            response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + sameSite));
            firstHeader = false;
            continue;
        }
        response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + sameSite));
    }

}

 



Ãâó: https://mandlife.tistory.com/entry/Å©·Ò¿¡¼­-Cookie-ÀÇ-°ªÀ»-ÀÒ¾î¹ö¸°´Ù-SameSite-¼³Á¤Çϱâ [ÇöÀç³ëÆ®]