Как вы настраиваете использование файлов cookie HttpOnly в PHP

StackOverflow https://stackoverflow.com/questions/36877

Вопрос

Как я могу установить файлы cookie в моем PHP apps как HttpOnly cookies?

Это было полезно?

Решение

  • Для ваши файлы cookie, смотрите этот ответ.
  • Для Собственный файл cookie сеанса PHP (PHPSESSID, по умолчанию), см. Ответ @richie's

Тот Самый 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 )

Войти NULL для параметров, которые вы хотите сохранить по умолчанию.Возможно, вы также захотите подумать, следует ли вам устанавливать secure параметр.

Это также возможно с использованием более старого, низкоуровневого header() функция:

header( "Set-Cookie: name=value; httpOnly" );

Другие советы

Для собственных файлов 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, но не теряйте даже час фильтрации выходных данных и нечеткого тестирования в обмен на него.

Обратите внимание, что файлы 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 сессионные файлы cookie также не используют по умолчанию .
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, 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 из браузера после каждого запроса на тестирование.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top