내 PHP apps
as 에서 쿠키를 어떻게 설정할 수 HttpOnly cookies
있습니까?
답변:
PHPSESSID
기본적으로) 볼 리치의 대답 @setcookie()
및 setrawcookie()
기능, 도입 httponly
하기 쉬운이 좋은을 다시 PHP 5.2.0의 어두운 시대에, 매개 변수를. 구문에 따라 7 번째 매개 변수를 true로 설정하기 만하면됩니다.
간결성을 위해 단순화 된 함수 구문
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
시작하다 NULL
기본값으로 유지하려는 매개 변수를 . secure
매개 변수를 설정해야하는지 고려할 수도 있습니다 .
이전의 하위 수준 header()
기능을 사용하는 것도 가능 합니다.
header( "Set-Cookie: name=value; httpOnly" );
set_cookie
다른 매개 변수를 설정할 필요가없는 경우 호출을 덜 장황 하게 만들 수 있습니다 . 예를 들면 set_cookie($name, $value, httponly: true)
.
Apache의 PHP 자체 세션 쿠키의 경우 :
이를 Apache 구성에 추가하거나.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
이전에 호출 된 경우 스크립트 내에서도 설정할 수 있습니다 session_start()
.
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
php_value
에 php_flag
일을하지 않습니다. 난 그냥 내 서버에 그것을 시도 ..
php_flag
경우 값도 변경해야합니다 ( on
또는 off
설명서 참조).
PHP 세션 쿠키는 httponly
기본적으로 사용되지 않습니다 .
하기 위해서:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
여기에 몇 가지주의 사항이 있습니다.
session_name()
전에 전화 해야session_start()
HttpOnly는 교차 사이트 스크립팅을 중지하지 않습니다. 대신 가능한 공격 하나를 무력화하고 현재는 IE에서만 수행합니다 (FireFox는 XmlHttpRequest에서 HttpOnly 쿠키를 노출하고 Safari는이를 전혀 존중하지 않습니다). 반드시 HttpOnly를 켜십시오. 단 한 시간의 출력 필터링과 퍼즈 테스트도 중단하지 마십시오.
Ilia의 설명 ... 5.2
해당 기사에서 언급했듯이 이전 버전의 PHP에서 헤더를 직접 설정할 수 있습니다.
header("Set-Cookie: hidden=value; httpOnly");
쿠키 설정 기능에서 지정할 수 있습니다 . PHP 설명서를 참조하십시오.
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
PHP> = 7.0 이후의보다 우아한 솔루션
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);