Как настроить использование файлов cookie HttpOnly в PHP? - PullRequest
87 голосов
/ 31 августа 2008

Как я могу установить куки в моем PHP apps как HttpOnly cookies?

Ответы [ 9 ]

106 голосов
/ 04 января 2012

Для файлов cookie сеанса PHP на Apache:
добавьте это к вашей конфигурации Apache или .htaccess

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

Это также можно установить в скрипте, если он вызывается до session_start().

ini_set( 'session.cookie_httponly', 1 );
83 голосов
/ 31 августа 2008
  • Для ваших файлов cookie см. Этот ответ.
  • * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Размер: *1007* (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" );
13 голосов
/ 11 сентября 2008

Имейте в виду, что HttpOnly не останавливает межсайтовый скриптинг; вместо этого он нейтрализует одну возможную атаку и в настоящее время делает это только в IE (FireFox предоставляет файлы cookie HttpOnly в XmlHttpRequest, а Safari вообще не соблюдает их). Во что бы то ни стало, включите HttpOnly, но не теряйте даже час выходной фильтрации и нечеткого тестирования в обмен на него.

12 голосов
/ 30 октября 2008

Обратите внимание, что файлы cookie сеанса PHP по умолчанию не используют httponly.

Для этого:

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

Здесь пара примечаний:

  • Вы должны позвонить session_name() до session_start()
  • Это также устанавливает путь по умолчанию '/', который для Opera нужен но какой PHP сессионные куки не делаются по умолчанию либо.
5 голосов
/ 31 августа 2008

Вы можете указать это в функции set cookie см. Руководство по php

setcookie('Foo','Bar',0,'/', 'www.sample.com'  , FALSE, TRUE);
5 голосов
/ 31 августа 2008
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

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

?>

Источник

5 голосов
/ 31 августа 2008

Объяснение здесь от Ильи ... 5.2 только через

Поддержка флага cookie httpOnly в PHP 5.2

Как указано в этой статье, вы можете установить заголовок самостоятельно в предыдущих версиях PHP

header("Set-Cookie: hidden=value; httpOnly");
3 голосов
/ 28 мая 2013

Вы можете использовать это в заголовочном файле.

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

Таким образом, все будущие сеансовые куки будут использовать httponly.

  • Обновлен.
1 голос
/ 20 ноября 2013

Правильный синтаксис команды php_flag:

php_flag  session.cookie_httponly On

И имейте в виду, просто сначала ответ от сервера установите куки и здесь (например, вы можете увидеть директиву "HttpOnly". Поэтому для тестирования удаляйте куки из браузера после каждого запроса на тестирование.

...