PHP에서 HttpOnly 쿠키 사용을 어떻게 설정합니까?


93

PHP appsas 에서 쿠키를 어떻게 설정할 수 HttpOnly cookies있습니까?


stackoverflow.com/questions/528405/… 브라우저 지원 정보가 있습니다.
Kzqai

2
@Tchalvak 아니요, 현재 답변은 여전히 ​​신뢰할 수 있습니다. PHP의 HTTP 전용 쿠키 설정과 관련하여 2008 년 이후 변경된 사항은 없습니다. HTTP 전용 쿠키를 지원하는 브라우저 는 다른 질문이며 답변도 다릅니다.
lanzz

github.com/delight-im/PHP-Cookie$cookie->setHttpOnly(true); 와 함께 사용할 수 있습니다
caw

답변:


92
  • 에 대한 쿠키 ,이 대답을 참조하십시오.
  • 위해 PHP 자신의 세션 쿠키 ( 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" );

PHP 8의 명명 된 매개 변수를 사용하면 마지막으로 set_cookie다른 매개 변수를 설정할 필요가없는 경우 호출을 덜 장황 하게 만들 수 있습니다 . 예를 들면 set_cookie($name, $value, httponly: true).
Sygmoral

120

Apache의 PHP 자체 세션 쿠키의 경우 :
이를 Apache 구성에 추가하거나.htaccess

<IfModule php5_module>
    php_flag session.cookie_httponly on
</IfModule>

이전에 호출 된 경우 스크립트 내에서도 설정할 수 있습니다 session_start().

ini_set( 'session.cookie_httponly', 1 );

9
+1은 (보안을 위해) 전체 서버에 배치하는 것이 좋지만 대신 php.ini.
Anthony Hatzopoulos

10
대신 php_flag를 사용해야합니다. "부울 값을 설정하는 데 php_value를 사용하지 마십시오. 대신 php_flag를 사용해야합니다." php.net/manual/en/configuration.changes.php
드레이 Machulda

@OndrejMachulda은 변경 php_valuephp_flag일을하지 않습니다. 난 그냥 내 서버에 그것을 시도 ..
네이트

6
@Nate :으로 변경하는 php_flag경우 값도 변경해야합니다 ( on또는 off설명서 참조).
Ondrej Machulda

14

PHP 세션 쿠키는 httponly기본적으로 사용되지 않습니다 .

하기 위해서:

$sess_name = session_name();
if (session_start()) {
    setcookie($sess_name, session_id(), null, '/', null, null, true);
}

여기에 몇 가지주의 사항이 있습니다.

  • 당신은 session_name() 전에 전화 해야session_start()
  • 이것은 또한 기본 경로를 '/'로 설정하는데, 이는 Opera에 필요하지만 PHP 세션 쿠키는 기본적으로 수행하지 않습니다.

12
php.net/manual/en/function.session-set-cookie-params.php 사용자 지정 코딩 대신 위의 PHP 기능을 통해 자동으로 수행 할 수 있습니다.
Ryaner 2010

13

HttpOnly는 교차 사이트 스크립팅을 중지하지 않습니다. 대신 가능한 공격 하나를 무력화하고 현재는 IE에서만 수행합니다 (FireFox는 XmlHttpRequest에서 HttpOnly 쿠키를 노출하고 Safari는이를 전혀 존중하지 않습니다). 반드시 HttpOnly를 켜십시오. 단 한 시간의 출력 필터링과 퍼즈 테스트도 중단하지 마십시오.


13
이 상황은 '08 년 이후로 변경되었을 수 있습니다. 최신 / 업데이트 된 목록은 다음과 같습니다. stackoverflow.com/questions/528405/…
Kzqai

7
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 

?>

출처




4

헤더 파일에서 사용할 수 있습니다.

// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);

이렇게하면 향후 모든 세션 쿠키가 httponly를 사용합니다.

  • 업데이트되었습니다.

2
그냥 참고로 session.use_only_cookies는> PHP에서 기본적으로 5.3에있다
닉 코트렐

1
및 올바른는 "모든 미래입니다 세션 ... 쿠키"Http 만이 아닌 사용자 정의 것들을 사용합니다
qdev

2

php_flag 명령의 올바른 구문은 다음과 같습니다.

php_flag  session.cookie_httponly On

그리고 서버의 첫 번째 답변 만 쿠키를 설정하고 여기 (예 : "HttpOnly"지시문을 볼 수 있습니다. 따라서 테스트를 위해 모든 테스트 요청 후 브라우저에서 쿠키를 삭제하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.