Как настроить использование файлов cookie HttpOnly в PHP

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

9 ответов


  • на печенье см. Этот ответ.
  • на собственный файл cookie сеанса 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 )

Enter NULL для параметров, которые вы хотите оставить значения по умолчанию. Вы также можете рассмотреть вопрос о том, следует ли устанавливать


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

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

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

ini_set( 'session.cookie_httponly', 1 );

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


обратите внимание, что файлы 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 сеансовые cookies не работают по умолчанию любой.

объяснение здесь от Ilia... 5.2 только

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

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

header("Set-Cookie: hidden=value; httpOnly");

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

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

?>

источник


вы можете указать его в функции Set cookie см. руководство по php

setcookie('Foo','Bar',0,'/', 'www.sample.com'  , FALSE, TRUE);

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

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

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

  • обновление.

правильный синтаксис команды php_flag составляет

php_flag  session.cookie_httponly On

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