PHP에서 Same-site 쿠키

6077 단어 쿠키PHPHTTP

2020년 1월 13일 추가



SameSite 쿠키는 2018년 12월에 릴리스된 PHP7.3.0의 setcookie() 함수에서 지원되었습니다.

7.3.0 미만의 PHP 또는 PSR-7 응답에 대해 Set-Cookie 헤더를 설정하려는 경우를 위해 bag2/cookie 라이브러리를 개발했습니다. 자세한 내용은 PSR-7과 원시 PHP에 대응하는 Set-Cookie 라이브러리를 만들었다 - 슈퍼 PHPer가 되자을 참조하십시오.

최근 쿠키에서는 SameSite이라는 새로운 속성이 제안되었습니다. 이 기사에서는이 속성의 효능이나 부작용에 대해서는 언급하지 않습니다. 귀찮아서… .

PHP의 문제



PHP에서 쿠키는 Can I use에서 발행합니다. 문제는이 함수의 인터페이스입니다.
bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]] )

속성 마다 인수로 건네주게 되어 있으므로, setcookie() 가 들어갈 여지가 없는 것입니다.

PHP 7.3에서 개선



PHP 기능 추가 제안SameSite에서는 올해 중 릴리스되는 PHP 7.3에서 추가될 예정입니다. 이 제안이 흥미로운 점은 인수의 수를 늘리는 것이 아니라 옵션 인수에 대한 연관 배열을 하나만 받는 것입니다.
bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, array $options ]]] )

즉, 이렇게 쿠키를 설정할 수 있습니다.
setcookie('hoge', 'fuga', 3600, [
    'path' => '/',
    'secure' => true,
    'httponly' => true,
    "samesite" => 'Strict',
]);

문제는 PHP 7.3의 기능 정지 예정일이 가까워졌는데 PHP: rfc:same-site-cookie 것입니다. (즉, 현재 릴리스 PR이 아직 병합되지 않았습니다.에도 반영되지 않습니다 )

기존 PHP에서 작업 라운드



그렇다면 PHP 7.3의 세계에 빠지지 않는 우리는 아직 SameSite의 혜택을 받을 수 없습니까?

위의 PR에서 흥미로운 예가 소개되었습니다.

PHP 7.3.0 알파 3

With PHP < 7.3 some people use a hack to add the samesite option ( path="xxx; samesite=..." ), but this doesn't work anymore in 7.3 ad the values ​​are filtered. So we really need this to be implemented.

이상한 목소리가 나왔네요... SameSite가 들어갈 여지가 있었는데, 이것이 일종의 인젝션일까요? ? 뭐 이 더티 해킹은 지금까지의 버전으로 움직이고 있기 때문에, 정식 대응하는 7.3에서도 동작 보장하지 않으면 안 되는군요, 같은 제안입니다.

그런 다음 이를 악용하면 PHP7.3 미만SameSite 속성을 설정할 수 있습니다.
setcookie('hoge', 'fuga', 3600, '/; SameSite=Strict', '', true, true);

세션에서 사용하는 경우 , session_set_cookie_params(), php.ini 또는 PHP7 이상에서는 ini_set()에서 설정할 수 있습니다.

요약



이것은 단 하나 취했다. 그러나, 이 사양 거동을 악용하면session_start()의 설정이 가능합니다.

좋은 웹페이지 즐겨찾기