Як я можу встановити файли 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]);