Å©·Ò¿¡¼ Cookie ÀÇ °ªÀ» ÀÒ¾î¹ö¸°´Ù (SameSite ¼³Á¤À¸·Î Å©·Ò80¹öÀü ´ëÀÀ!)
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-¼³Á¤Çϱâ [ÇöÀç³ëÆ®]