Як я можу встановити файли cookie у своєму PHP appsяк HttpOnly cookies?
$cookie->setHttpOnly(true);з github.com/delight-im/PHP-Cookie
Як я можу встановити файли cookie у своєму PHP appsяк HttpOnly cookies?
$cookie->setHttpOnly(true);з github.com/delight-im/PHP-Cookie
Відповіді:
PHPSESSIDза замовчуванням), див. Відповідь @ richieФункції setcookie()and 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" );
set_cookieдзвінок менш детальним, якщо нам не потрібно буде встановлювати інші параметри. Наприклад set_cookie($name, $value, httponly: true).
Для власних файлів 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.
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, але не втрачайте навіть години фільтрації вихідних даних та тестування нечіткості в торгівлі на це.
Пояснення тут від Іллі ... 5.2, однак лише
Підтримка прапора 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 є
php_flag session.cookie_httponly On
І майте на увазі, просто першою відповіддю від сервера встановіть файл cookie і тут (наприклад, ви можете побачити директиву "HttpOnly". Отже, для тестування видаляйте файли cookie з браузера після кожного запиту на тестування.
Більш елегантне рішення, оскільки PHP> = 7,0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);