@Tchalvak Нет, текущие ответы по-прежнему авторитетны. С 2008 года ничего не изменилось в отношении настройки файлов cookie только для HTTP в PHP. Какие браузеры поддерживают файлы cookie только для HTTP - это другой вопрос, но с другим ответом.
Для собственного файла cookie сеанса PHP ( PHPSESSIDпо умолчанию) см . Ответ @ richie
Функции setcookie()и setrawcookie(), представленныеhttponly параметр был еще в темные времена PHP 5.2.0, сделали это простым и приятным. Просто установите для 7-го параметра значение true в соответствии с синтаксисом
С именованными параметрами PHP 8 мы, наконец, сможем сделать set_cookieвызов менее подробным, если нам не нужно устанавливать другие параметры. Например set_cookie($name, $value, httponly: true).
Sygmoral
121
Для файлов cookie сеанса PHP на Apache:
добавьте это в конфигурацию Apache или.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Это также можно установить в сценарии, если он вызывается раньше session_start().
+1, так как это хорошая вещь (для безопасности), чтобы она была размещена на всем вашем сервере, но вместо этого добавлена в php.ini.
Энтони Хацопулос
10
Обратите внимание: вместо этого следует использовать php_flag: «Не используйте php_value для установки логических значений. Вместо этого следует использовать php_flag». php.net/manual/en/configuration.changes.php
Ондрей Мачулда,
@OndrejMachulda Переход php_valueна php_flagне работает. Я только что попробовал на своем сервере ..
Нейт
6
@Nate: При переходе на php_flag, вы должны также изменить значение - на либо onили off- см. Руководство.
Ондрей Мачулда
14
Обратите внимание, что файлы cookie сеанса PHP httponlyпо умолчанию не используются .
Имейте в виду, что HttpOnly не останавливает межсайтовый скриптинг; вместо этого он нейтрализует одну возможную атаку, и в настоящее время делает это только в IE (FireFox предоставляет файлы cookie HttpOnly в XmlHttpRequest, а Safari вообще не учитывает его). Во что бы то ни стало, включите HttpOnly, но не упускайте даже час фильтрации вывода и нечеткого тестирования в обмен на это.
Просто FYI session.use_only_cookies по умолчанию включен в PHP> 5.3
Ник Коттрелл,
1
и правильно, «все будущие сеансовые файлы cookie» будут использовать httponly, а не пользовательские ...
qdev 01
2
Правильный синтаксис команды php_flag:
php_flag session.cookie_httponly On
И имейте в виду, просто сначала ответ от сервера установите cookie и здесь (например, вы можете увидеть директиву «HttpOnly». Итак, для тестирования удаляйте файлы cookie из браузера после каждого запроса тестирования.
$cookie->setHttpOnly(true);
с github.com/delight-im/PHP-CookieОтветы:
PHPSESSID
по умолчанию) см . Ответ @ richieФункции
setcookie()
иsetrawcookie()
, представленныеhttponly
параметр был еще в темные времена PHP 5.2.0, сделали это простым и приятным. Просто установите для 7-го параметра значение true в соответствии с синтаксисомСинтаксис функции упрощен для краткости
Введите
NULL
параметры, которые вы хотите оставить по умолчанию. Вы также можете подумать, следует ли вам устанавливатьsecure
параметр.Также возможно использование более старой функции нижнего уровня
header()
:header( "Set-Cookie: name=value; httpOnly" );
источник
set_cookie
вызов менее подробным, если нам не нужно устанавливать другие параметры. Напримерset_cookie($name, $value, httponly: true)
.Для файлов cookie сеанса PHP на Apache:
добавьте это в конфигурацию Apache или
.htaccess
Это также можно установить в сценарии, если он вызывается раньше
session_start()
.ini_set( 'session.cookie_httponly', 1 );
источник
php.ini
.php_value
наphp_flag
не работает. Я только что попробовал на своем сервере ..php_flag
, вы должны также изменить значение - на либоon
илиoff
- см. Руководство.Обратите внимание, что файлы cookie сеанса PHP
httponly
по умолчанию не используются .Для этого:
$sess_name = session_name(); if (session_start()) { setcookie($sess_name, session_id(), null, '/', null, null, true); }
Несколько замечаний здесь:
session_name()
раньшеsession_start()
источник
Имейте в виду, что HttpOnly не останавливает межсайтовый скриптинг; вместо этого он нейтрализует одну возможную атаку, и в настоящее время делает это только в IE (FireFox предоставляет файлы cookie HttpOnly в XmlHttpRequest, а Safari вообще не учитывает его). Во что бы то ни стало, включите HttpOnly, но не упускайте даже час фильтрации вывода и нечеткого тестирования в обмен на это.
источник
<?php //None HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); //HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); ?>
Источник
источник
Объяснение здесь от Ильи ... 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);
источник
Вы можете использовать это в файле заголовка.
// setup session enviroment ini_set('session.cookie_httponly',1); ini_set('session.use_only_cookies',1);
Таким образом, все будущие сеансовые файлы cookie будут использовать httponly.
источник
Правильный синтаксис команды php_flag:
И имейте в виду, просто сначала ответ от сервера установите cookie и здесь (например, вы можете увидеть директиву «HttpOnly». Итак, для тестирования удаляйте файлы cookie из браузера после каждого запроса тестирования.
источник
Более элегантное решение, поскольку PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);
session_start
параметры session_start
источник