Js установка cookie. Работа с куками из javascript

На картинке видно, что в cookie присутствует строка wordpress_logged_in_263d663a02379b7624b1028a58464038=admin. Это значение находится в незашифрованном виде в файле cookie и его легко перехватить с помощью утилиты Achilles, но как правило в большинстве случаев в Achilles можно увидеть лишь хеш той или иной записи. Перед отсылкой запроса на сервер можно попытаться заменить эту строку на любую подобную (хотя в данном случае смысла нет) - количество попыток не ограничено. Затем, отослав этот запрос на сервер с помощью кнопки Send, можно получить ответ от сервера, предназначаю­щийся администратору.

В предыдущем примере можно использовать прямую подмену идентификатора пользователя. Кроме того, название параметра, подмена значения которого предоставляет дополнительные возможности хакеру, может быть следующим: user (например, USER=JDOE), любое выражение со строкой ID (например, USER=JDOE или SESSIONID=BLAHBLAH), admin (например, ADMIN=TRUE), session (например, SESSION=ACTIVE), cart (например, CART=FULL), а также такие выражения, как TRUE, FALSE, ACTIVE, INACTIVE. Обычно формат файлов cookie очень зависит от приложения, для нужд которого они используются. Однако приведенные советы по поиску изъянов приложений с помощью файлов cookie годятся практически для всех форматов.

Меры противодействия извлечению информации из файлов cookie, выполняемые на стороне клиента

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

Компания Kookaburra Software разработала инструмент, облегчающий использование файлов cookie. Называется инструмент CookiePal (http://www.kburra.com/cpal.html (см. www.kburra.com) ). Данная программа предназначена для предупреждения пользователя при попытке Web-узла установить на машину файл cookie, при этом пользователь может разрешить или запретить это действие. Подобные функции блокирования файлов cookie на сегодня есть во всех браузерах.

Еще одной причиной регулярной установки обновлений Web-броузера, является постоянно выявляемые изъяны системы безопасности этих программ. Так, Бенет Хэйзелтон (Bennet Haselton) и Джеми МакКарти (Jamie McCarthy) создали сценарий, который после щелчка на ссылке извлекает файлы cookie с машины клиента. В результате становится доступным все со­держимое файлов cookie, которые находятся на машине пользователя.

Взлом подобного рода может быть также осуществлен с помощью дескриптора

Для того, чтоб подобные вещи не грозили нашим личным данным, сам так делаю и всем советую всегда обновлять ПО, работающее с HTML-кодом (e-mail клиенты, медиа-проигрыватели, браузеры и т.д.).

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

Меры противодействия, выполняемые на стороне сервера

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

Конечно же, важно понимать, что файлы cookie могут использоваться в целях обеспече­ния безопасности Web-серверов для осуществления авторизации пользователей. Если все же разрабатываемому приложению необходимо использовать файлы cookie, то этот механизм следует настроить таким образом, чтобы при каждом сеансе использовались различные клю­чи с коротким периодом действия, а также стараться не помещать в эти файлы информацию, которая может быть использована хакерами для взлома (такую как ADMIN=TRUE).

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

Я использовал Facebook login для идентификации пользователей. Когда приходит новый пользователь, я храню его идентификатор пользователя в своей базе данных. В следующий раз, когда они придут, я узнал их идентификатор Facebook, и я знаю, какой пользователь находится в моей базе данных.

теперь я пытаюсь сделать то же самое с OAuth2 от Google, но как я могу распознать пользователей?

Google отправляет мне несколько кодов и токенов (access_token, id_token, refresh_token), однако ни один из них не является постоянным. Это означает, что если я выйду из системы и вернусь через 2 минуты позже, все 3 значения изменились. Как я могу однозначно идентифицировать пользователя?

Я использую их клиентскую библиотеку PHP:https://code.google.com/p/google-api-php-client/

6 54

Nathan H

6 ответов:

как уже упоминалось, вы можете отправить GET to https://www.googleapis.com/oauth2/v3/userinfo , используя токен носителя OAuth2, который вы только что получили, и вы получите ответ с некоторой информацией о пользователе (id, имя и т. д.).

также стоит отметить, что Google реализует OpenID Connect и что эта конечная точка информации о пользователе является только одной ее частью.

OpenID Connect - это уровень аутентификации поверх OAuth2. При обмене авторизацией code в конечной точке токена Google вы получаете токен доступа (access_token параметр), а также маркер идентификатора OpenId Connect (

Cookies - это механизм хранения данных броузером удаленного компьютера для идентификации возвращающихся посетителей и хранения параметров веб-страниц (например, переменных).

Приведем пример использования Cookies на конкретном примере.

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

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

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

  • Для каждого IP-адреса нужно вести учет в одной таблице, которая может быть очень большой. А из этого следует, что мы нерационально используем процессорное время и дисковое пространство;
  • У большинства домашних пользователей IP-адреса являются динамическими. То есть, сегодня у него адрес 212.218.78.124, а завтра - 212.218.78.137. Таким образом, велика вероятность идентифицировать одного пользователя несколько раз.

Можно использовать второй способ, который намного легче в реализации и более эффективен. Мы устанавливаем в Cookie переменную, которая будет храниться на диске удаленного пользователя. Эта переменная и будет хранить информацию о посещениях. Она будет считываться скриптом при обращении посетителя к серверу. Выгода такого метода идентификации очевидна. Во-первых, нам не нужно хранить множество ненужной информации о IP-адресах. Во-вторых, нас не интересуют динамические IP-адреса, поскольку данные о своих посещениях хранятся конкретно у каждого посетителя сайта.

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

Файлы Cookies представляют собой обыкновенные текстовые файлы, которые хранятся на диске у посетителей сайтов. Файлы Cookies и содержат ту информацию, которая была в них записана сервером.

Программирование Cookies

Приступим к программированию Cookies.

Для установки Cookies используется функция SetCookie() . Для этой функции можно указать шесть параметров, один из которых является обязательным:

  • name - задает имя (строк), закрепленное за Cookie;
  • value - определяет значение переменной (строка);
  • expire - время "жизни" переменной (целое число). Если данный параметр не указать, то Cookie будут "жить" до конца сессии, то есть до закрытия браузера. Если время указано, то, когда оно наступит, Cookie самоуничтожится.
  • path - путь к Cookie (строка);
  • domain - домен (строка). В качестве значения устанавливается имя хоста, с которого Cookie был установлен;
  • secure - передача Cookie через защищенное HTTPS-соединение.

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

Пример установки Cookies:



SetCookie ("Test" , "Value" );

// Устанавливаем Cookie на один час после установки:
SetCookie ("My_Cookie" , "Value" , time ()+ 3600 );

?>

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

// Устанавливаем Cookie до конца сессии:
// В случае успешной установки Cookie, функция SetCookie возвращает TRUE:
"

Cookies успешно установлены!

" ;
?>

Функция SetCookie() возвращает TRUE в случае успешной установки Cookie. В случае, если Cookie установить не удается SetCookie() возвратит FALSE и возможно, предупреждение (зависит от настроек PHP). Пример неудачной установки Cookie:

// Cookies установить не удастся, поскольку перед отправкой
// заголовка Cookie мы выводим в браузер строку "Hello":
echo "Hello" ;
// Функция SetCookie возвратит FALSE:
if (SetCookie ("Test" , "Value" )) echo "

Cookie успешно установлен!

" ;
else echo "

Cookie установить не удалось!

"
;
// Выводит "Cookie установить не удалось!".
?>

Cookie установить не удалось, поскольку перед посылкой заголовка Cookie мы вывели в браузер строку "Hello".

Чтение значений Cookies

Получить доступ к Cookies и их значениям достаточно просто. Они хранятся в суперглобальных массивах и $_COOKIE и $HTTP_COOKIE_VARS .

Доступ к значениям осуществляется по имени установленных Cookies, например:

echo $_COOKIE["my_cookie"];
// Выводит значения установленной Cookie "My_Cookie"

Пример установки Cookie и последующего его чтения:

// Устанавливаем Cookie "test" со значением "Hello" на один час:
setcookie ("test" , "Hello" , time ()+ 3600 );
// При следующем запросе скрипта выводит "Hello":
echo @$ _COOKIE [ "test" ];
?>

В рассмотренном примере при первом обращении к скрипту устанавливается Cookie "test" зо значением "hello". При повторном обращении к скрипту будет выведено значение Cookie "test", то есть строка "Hello".

При чтении значений Cookies обращайте внимание на проверку существования Cookies, например, используя оператор isset() . Либо путем подавления вывода ошибок опереатором @

А вот пример, как построить счетчик числа загрузок страницы с помощью Cookies:

// Проверяем, был ли уже установлен Cookie "Mortal",
// Если да, то читаем его значение,
// И увеличиваем значение счетчика обращений к странице:
if (isset ($ _COOKIE [ "Mortal" ])) $ cnt =$ _COOKIE [ "Mortal" ]+ 1 ;
else $ cnt = 0 ;
// Устанавливаем Cookie "Mortal" зо значением счетчика,
// С временем "жизни" до 18/07/29,
// То есть на очень долгое время:
setcookie ("Mortal" ,$ cnt , 0x6FFFFFFF );
// Выводит число посещений (загрузок) этой страницы:
echo "

Вы посещали эту страницу " .@$ _COOKIE [ "Mortal" ]. " раз

" ;
?>

Удаление Cookies

Иногда возникает необходимость удаления Cookies. Сделать это несложно, необходимо лишь вновь установить Cookie с идентичным именем и пустым параметром. Например:

// Удаляем Cookie "Test":
SetCookie ("Test" , "" );
?>

Установка массива Cookies и его чтение

Мы может установить массив Cookies, используя квадратные скобки в именах Cookies , а затем прочитать массив Cookies и значения этого массива:

// Устанавливаем массив Cookies:
setcookie ("cookie" , "Первый" );
setcookie ("cookie" , "Второй" );
setcookie ("cookie" , "Третий" );

// После перезагрузки страницы мы отобразим
// Состав массива Cookies "cookie":
if (isset ($ _COOKIE [ "cookie" ])) {
foreach ($ _COOKIE [ "cookie" ] as $ name => $ value ) {
echo "$name: $value
" ;
}
}
?>

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



<<< Назад Содержание Вперед >>>
Есть еще вопросы или что-то непонятно - добро пожаловать на наш

HTTP является протоколом без запоминания состояний запросов. Это означает, что пользователь отправляет запрос, сервер отвечает на этот запрос, не помня запрос позже. Для того, чтобы отслеживать важную информацию (например, предпочтения пользователя, действия пользователя и т.д.) на веб-сайте при помощи PHP создаются cookie, ну или печеньки. В этой статье, я собираюсь рассказать о том, как работать с куками, как их нужно создавать, какие параметры они имеют, а так же как можно их удалять.

Что такое Cookie?

Куки очень полезны для хранения информации непосредственно в самом браузере пользователя. Это простой текстовый файл, который хранит максимум 4кб данных.

Куки создаются с помощью браузера по запросу сервера (в соответствии с логикой программы). После того, как печенье создается на стороне пользователя, его браузер отправляет эту информацию(из куки) обратно на сервер с помощью HTTP - заголовка.

Зачастую в куках хранятся логины, пароли и прочее. Например вы заходите на сайт, вводите свой логин и пароль. Сайт автоматом создаёт у вас куки с этими данными. И при следующем посещении сайта, он просто проверяет наличие кук, и подгружает данные сохранённого в них пользователя.

//Пример индексной страницы такого сайта if($_COOKIE["login"]){ header("location: /lk/index.php?login=".$_COOKIE["login"]);//Переведёт сразу в личный кабинет } //Далее идёт, например, форма входа и регистрации

Почему Cookie?

HTTP является протоколом без запоминания состояний запросов, так что нет никакого способа, чтобы отслеживать предыдущие действия пользователя на сайте. Cookie"s являются лучшим способом для хранения данных. Все знаю про печеньки желаний, которую ты разламываешь, а внутри бумажка с тем, что возможно с тобой произойдёт в будущем. Как по мне так именно от сюда и растут ноги, по поводу названия.

PHP Куки

Собственно так как я уже объяснил что это такое давайте узнаем, как установить куки в PHP.

Используем SetCookie() метод для установки куки в пользовательском браузере.

Синтаксис для установки куки в PHP

Setcookie(name, val, time, path, domain, secure);

name - Определяет имя куки.

val - Значение которое мы хотим хранить в куки. Куки всегда хранит значение строки.

time (необязательный параметр) - Установить время истечения срока действия куки. Если это поле пусто, то куки будут удалены при закрытии браузера.

domain (необязательное поле) - Установите область, в которой кука доступна. Если вы хотите установить кук для нескольких поддоменов, а затем использовать имя основного домена с точкой в качестве префикса.

Например:

Пусть my.com имеет несколько поддоменов, таких как tech.my.com, only.my.com. И я хочу чтобы кука установленная в my.com была доступна для всех моих поддоменов, то я устанавливаю домен как.my.com .

secure(необязательное поле) - Это Определяет, должно ли печенье передаваться через защищенное соединение по протоколу HTTPS. По умолчанию установлено как FALSE. Если это установить тру, то это означает, что кука будет установлено только если защищенное соединение существует, и логично что при HTTP создана не будет.

Setcookie("login","valera123");

При помощи скрипта выше у нас создастся кука с именем login и с значением valera123.

Примечание: Куки может хранить только строковые значения. Они не могут хранить массив. Для того, чтобы сохранить массив в куки, вам нужно сначала преобразовать их в строку. Об этом я обязательно расскажу позже.

Примечание: Как вы заметили, я не установил время жизни нашей печенюхи. Именно по этому она исчезнет после того, как наш браузер будет закрыт...

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


Мы не определили время истечения срока жизни куки. Зададим ей 30 дней. В этом случае, мы должны упомянуть о времени. После этого она будет жить в течение 30 дней, пока пользователь не удалит её вручную.

Setcookie("login","valera123",time()+3600*24*30);

3600 - 1 час
24 - сутки
30 - дней

Как установить куки для субдоменов

setcookie("login","valera123",time()+3600*24*30,"/",".my.com");

Ну собственно данный пример уже приводился

Как получить значение куки в PHP

$ _COOKIE - используется для получения значения куки. Ниже приведён код как именно можно получить значение печеньки, установленной ранее.

$val = $_COOKIE["login"]; echo $val; //Выведет valera123

Как удалить Cookie в PHP

Чтобы удалить куки в PHP, установите отрицательное время (прошедшее время).

Setcookie("login","valera123",time()-3600*24);

Так что же происходит, если мы устанавливаем отрицательное время. В этом случае, кука истекает автоматически.

Важные моменты о Cookie

1. Кука может хранить максимум до 4 Кбайт данных.

2. Она может хранить только строки.

3. Cookies могут быть доступны только в браузере, который установит их. Cookie установленные в браузере Chrome не могут быть доступны в браузере Mozilla, или каком либо другом.

4. Старайтесь избегать хранения конфиденциальных и особо секретных данных в куки.

Собственно на этом всё. Я очень надеюсь, что вам понравилась данная строка, делитесь своим мнением в комментариях, а так же не забывайте делать репосты.

Последнее обновление: 1.11.2015

Cookie (куки) представляют небольшие наборы данных (не более 4 кБайт), с помощью которых веб-сайт может сохранить на компьютере пользователя любую информацию. С помощью куки можно отслеживать активность пользователя на сайте: залогинен пользователь на сайте или нет, отслеживать историю его визитов и т.д.

Сохранение cookie

Для сохранения куки на компьютере пользователя используется функция setcookie() . Она имеет следующее определение:

Bool setcookie(string $name, string $value, int $expire, string $path, string $domain, bool $secure, bool $httponly);

Функция setcookie() может принимать следующие параметры:

    name: имя cookie, которое будет использоваться для доступа к его значению

    value: значение или содержимое cookie - любой алфавитно-цифровой текст не более 4 кБайт

    expire (необязательный параметр): срок действия, после которого cookie уничтожаются. Если данный параметр не установлен или равен 0, то уничтожение cookie происходит после закрытия браузера.

    path (необязательный параметр): путь к каталогу на сервере, для которого будут доступны cookie. Если задать "/", cookie будут доступны для всего сайта. Если задать, например, "/mydir/" , cookie будут доступны только из каталога /mydir/" и всех его подкаталогов. По умолчанию значением является текущий каталог, в котором устанавливаются cookie.

    domain (необязательный параметр): задает домен, для которого будут доступны cookie. Если это домен второго уровня, например, localhost.com , то cookie доступны для всего сайта localhost.com, в том числе и для его поддоменов типа blog.localhost.com .

    Если задан поддомен blog.localhost.com , то cookie доступны только внутри этого поддомена.

    secure (необязательный параметр): указывает на то, что значение cookie должно передаваться по протоколу HTTPS. Если задано true , cookie от клиента будет передано на сервер, только если установлено защищенное соединение. По умолчанию равно false .

    httponly (необязательный параметр): если равно true , cookie будут доступны только через http протокол. То есть cookie в этом случае не будут доступны скриптовым языкам, например, JavaScript. По умолчанию параметр равен false

Сохраним cookie:

$value1 = "Сингапур"; $value2 = "китайский"; setcookie("city", $value1); setcookie("language", $value2, time()+3600); // срок действия 1 час

Здесь устанавливаются две куки: "city" и "language". Первая куки уничтожается после закрытия браузера, а вторая - через 3600 секунд, то есть через час

Получение cookie

Чтобы получить cookie, можно использовать глобальный ассоциативный массив $_COOKIE , например, $_COOKIE["city"] . Так, получим ранее сохраненные куки:

If (isset($_COOKIE["city"])) echo "Город: " . $_COOKIE["city"] . "
"; if (isset($_COOKIE["language"])) echo "Язык: " . $_COOKIE["language"];

Сохранение массивов в cookie

Сохранение в куки массивов имеет некоторые особенности. Например, сохраним следующий массив:

Setcookie("lan", "PHP"); setcookie("lan", "C#"); setcookie("lan", "Java");

Теперь получим его и выведем на страницу:

If (isset($_COOKIE["lan"])) { foreach ($_COOKIE["lan"] as $name => $value) { $name = htmlspecialchars($name); $value = htmlspecialchars($value); echo "$name. $value
"; } }

Удаление cookie

Для удаления cookie достаточно в качестве срока действия указать какое-либо время в прошлом:

Setcookie ("city", "", time() - 3600);