Как я могу установить файлы cookie в моем PHP apps
как HttpOnly cookies
?
Как настроить использование файлов cookie HttpOnly в PHP
Ответы (10)
- Что касается ваших файлов cookie, см. Этот ответ.
- Для собственного файла cookie сеанса PHP (по умолчанию
PHPSESSID
) см. ответ @ richie
setcookie()
и _ 3_, еще в темные времена PHP 5.2.0, представили логический параметр httponly
, что сделало это простым и приятным. Просто установите для 7-го параметра значение true в соответствии с синтаксисом
Синтаксис функций упрощен для краткости
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
В PHP ‹8 укажите NULL
для параметров, которые вы хотите оставить по умолчанию.
В PHP ›= 8 вы можете получить выгоду от использования именованных параметров. См. этот вопрос об именованных параметрах.
setcookie( $name, $value, httponly:true )
Также возможно использование более старой функции нижнего уровня header()
:
header( "Set-Cookie: name=value; HttpOnly" );
Вы также можете подумать, следует ли вам устанавливать параметр Secure
.
set_cookie
менее подробным, если нам не нужно устанавливать другие параметры. Например set_cookie($name, $value, httponly: true)
.
- person Sygmoral; 30.08.2020
setcookie("name", "value", ['httponly' => true]);
- person Dian; 25.04.2021
Для файлов cookie сеанса PHP на Apache:
добавьте это в конфигурацию Apache или .htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Это также можно установить в сценарии, если он вызывается до session_start()
.
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
- person Anthony Hatzopoulos; 23.11.2012
php_value
на php_flag
не работает. Я только что попробовал на своем сервере ..
- person Nate; 28.12.2013
php_flag
вы должны также изменить значение - на on
или off
- см. Руководство.
- person Ondrej Machulda; 29.12.2013
Обратите внимание, что файлы 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 по умолчанию также не используются.
Имейте в виду, что 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 только хотя
http://ilia.ws/archives/121-httpOnly-cookie-flag-support-in-PHP-5.2.html
Как указано в этой статье, вы можете установить заголовок самостоятельно в предыдущих версиях 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:
php_flag session.cookie_httponly On
И имейте в виду, просто сначала ответ от сервера установите cookie и здесь (например, вы можете увидеть директиву «HttpOnly». Итак, для тестирования удаляйте файлы cookie из браузера после каждого запроса тестирования.
Более элегантное решение, поскольку PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);
$cookie->setHttpOnly(true);
с github.com/delight-im/PHP-Cookie - person caw   schedule 13.07.2016