У меня странная проблема, когда после регенерации идентификатора сеанса с помощью
session_regenerate_id(true);
Кажется, что cookie теряет свои флаги «Безопасный, HttpOnly».
Я могу сбросить cookie с помощью
$params = session_get_cookie_params();
setcookie("PHPSESSID", session_id(), 0, $params["path"], $params["domain"],
true, // this is the secure flag you need to set. Default is false.
true // this is the httpOnly flag you need to set
);
но veracode (который мы используем для тестирования безопасности) помечает его как неуверенный, потому что первый cookie (тот, который регенерируется) не имеет защищенных тегов HttpOnly в заголовке.
Вот пример заголовка
Cache-Control: no-store, no-cache, must-revalidate
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Tue, 06 Nov 2018 12:56:41 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=98
Location: home.php
Pragma: no-cache
Server: Apache
Set-Cookie: PHPSESSID=18a289a6c8d34b0df72dafc9d5e12c92; path=/
Set-Cookie: PHPSESSID=18a289a6c8d34b0df72dafc9d5e12c92; path=/; secure; HttpOnly
Veracode помечает проблему, поскольку первый файл cookie не имеет безопасных тегов httpOnly. Я предполагаю, что чтение только первого, или кажется, что они не отображаются по умолчанию, небезопасно. Или есть лучший способ добиться того, что они просят? Вот мой код.
session_start();
$_SESSION = array();
session_unset();
session_destroy();
session_start(); //Not sure if this is needed
session_regenerate_id(true);
$params = session_get_cookie_params();
setcookie("PHPSESSID", session_id(), 0, $params["path"], $params["domain"],
true, // this is the secure flag you need to set. Default is false.
true // this is the httpOnly flag you need to set
);