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


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

9 82

9 ответов:

  • на печенье см. Этот ответ.
  • на собственный файл cookie сеанса PHP (PHPSESSID по умолчанию), см. @Ричи

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

объяснение здесь от Ильи... 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);

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

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

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

php_flag  session.cookie_httponly On

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