Как настроить cookie HttpOnly на PHP?

Как я могу установить файлы cookie в своих PHP apps как HttpOnly cookies ?

Solutions Collecting From Web of "Как настроить cookie HttpOnly на PHP?"

  • Для ваших файлов cookie см. Этот ответ.
  • Для собственного сеанса cookie PHP (по умолчанию PHPSESSID ) см . Ответ @ richie

Функции 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 на Apache:
добавьте это в свою конфигурацию Apache или .htaccess

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

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

 ini_set( 'session.cookie_httponly', 1 ); 

Имейте в виду, что HttpOnly не останавливает межсайтовый скриптинг; вместо этого он нейтрализует одну возможную атаку и в настоящее время делает это только в IE (FireFox предоставляет файлы HttpOnly cookie в 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, но какие cookie-файлы PHP не выполняются по умолчанию.

Объяснение здесь из Илии … 5.2, хотя

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

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

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

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

 setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE); 
 <?php //None HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); //HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, 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. Поэтому для тестирования удалять файлы cookie из браузера после каждого запроса на тестирование.