Как вы настраиваете использование файлов cookie HttpOnly в PHP
Вопрос
Как я могу установить файлы 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);
?>
Вы можете указать это в функции 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 "). Поэтому для тестирования удаляйте cookie из браузера после каждого запроса на тестирование.