Как настроить использование файлов cookie HttpOnly в PHP
Как я могу установить куки в моем PHP apps
as HttpOnly cookies
?
9 ответов
- на печенье см. Этот ответ.
- на собственный файл cookie сеанса PHP (
PHPSESSID
по умолчанию), см. @Ричи
на setcookie()
и setrawcookie()
функции, ввел httponly
параметр, еще в темные века PHP 5.2.0, что делает это приятным и легким. Просто установите 7-й параметр в true, в соответствии с синтаксисом
синтаксис упрощен для краткости
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Enter NULL
для параметров, которые вы хотите оставить значения по умолчанию.
Вы также можете рассмотреть вопрос о том, следует ли устанавливать
для собственных файлов cookie сеанса PHP на Apache:
добавьте это в конфигурацию Apache или .htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Это также может быть установлено в скрипте, если он вызывается до session_start()
.
ini_set( 'session.cookie_httponly', 1 );
имейте в виду, что HttpOnly не останавливает межсайтовые скрипты; вместо этого он нейтрализует одну возможную атаку и в настоящее время делает это только в IE (FireFox предоставляет файлы cookie HttpOnly в XmlHttpRequest, и Safari не соблюдает его вообще). Конечно, включите HttpOnly, но не бросайте даже час фильтрации вывода и тестирования fuzz в торговле для него.
обратите внимание, что файлы cookie сеанса PHP не используют httponly
по умолчанию.
для этого:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
несколько пунктов Примечания здесь:
- нужно позвонить
session_name()
доsession_start()
- это задает путь по умолчанию'/', который необходим для Opera но какой PHP сеансовые cookies не работают по умолчанию любой.
объяснение здесь от Ilia... 5.2 только
поддержка флагов файлов cookie httpOnly в PHP 5.2
Как указано в этой статье, вы можете задать заголовок в предыдущих версиях PHP
header("Set-Cookie: hidden=value; httpOnly");
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
вы можете указать его в функции Set 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". Поэтому для тестирования удалите cookies из браузера после каждого запроса на тестирование.