Бисквитките (cookies) са механизъм, чрез който сървърите съхраняват и връщат информация за клиента. Те са текстов файл, който се съхранява на клиентския компютър чрез включване на Set-Cookie хедър като част от HTTP отговора, който обикновено се генерира с CGI скрипт.
Стъпките за идентификация на потребител са:
Информация за атаката "Междусайтов скриптинг" (Cross Site Scripting) можете да намерите на следните адреси:
Стъпките за идентификация на потребител са:
- Сървърът изпраща бисквитка към браузъра (име, години, идентификационен номер и т.н.).
- Браузърът съхранява тази информация на клиентския компютър за бъдещо ползване.
- При следващо посещение в сайта, браузърът изпраща молба към уеб сървъра заедно с информацията от бисквитката и сървърът използва тази информация, за да идентифицира потребителя.
Информация за атаката "Междусайтов скриптинг" (Cross Site Scripting) можете да намерите на следните адреси:
http://www.imperva.com/resources/glossary?term=cookie_poisoning
https://www.owasp.org/index.php/Testing_for_Cross_site_scripting
https://www.owasp.org/index.php/Testing_for_Cross_site_scripting
Структура на бисквитката
Бисквитките обикновено се поставят в HTTP хедъра (JavaScript може да постави бисквитката директно в браузъра).
РНР скрипт, който изпраща бисквитка, всъщност изпраща хедър.
Един от начините да разгледате HTTP хедъра е: http://web-sniffer.net/
РНР скрипт, който изпраща бисквитка, всъщност изпраща хедър.
Един от начините да разгледате HTTP хедъра е: http://web-sniffer.net/
![]() |
---|
HTTP Request Header |
![]() |
---|
HTTP Response Header |
Друг начин, по който можете да разгледате HTTP хедър, е да приложите командата curl в командния ред на Ubuntu, например:
curl -I https://www.youtube.com/
curl -I https://www.youtube.com/
![]() |
|
---|---|
Изход от командата curl |
Създаване, четене и изтриване на бисквитки (cookies)
РНР скрипта има достъп до бисквитките чрез глобалната променлива $_COOKIE.
Функцията, служеща за изпращане на бисквитки e setcookie ().
Функцията, служеща за изпращане на бисквитки e setcookie ().
Синтаксисът на функцията setcookie () е:
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
Параметри на функцията:
$name- задължителен параметър. Съдържа името на бисквитката, което се съхранява в променливата $_COOKIE.
$value- незадължителен параметър. Съдържа стойността на променливата $name. Стойността ѝ се връща от глобалната променлива $_COOKIE[“име на бисквитката”]
$expire- незадължителен параметър. Срока на годност на бисквитката :). Времето закоето бисквитката се съхранява на клиентския компютър.
Ако тази стойност не е определена, трайността на бисквитката е до момента, в който браузърът се затвори. Ако браузърът е конфигуриран да съхранява бисквитки, той ще ги съхранява до датата на изтичането им.
$path- незадължителен параметър. Определя директорията, за която бисквитката е валидна. Единична наклонена черта означава, че бисквитката е валидна за всички директории.
$domain- незадължителен параметър. Определя името на домейна и трябва да съдържа най-малко две точки, за да бъде валидно. Бисквитките са валидни за хоста и домейна, който ги е създал.
$secure- незадължителен параметър. Стойността на този параметър може да е 1, което показва, че бисквитката ще бъде предадена през защитена HTTPS връзка или 0, което показва, че бисквитката ще се предаде през обикновена HTTP връзка.
$httponly- незадължителен параметър. Когато е TRUE, бисквитката е достъпна единствено през HTTP протокол. Което означава, че бисквитката няма да е достъпна при използване на скриптов език, подобно на Java Script. Тази опция е полезна за намаляване на опасността от XSS атаки (този параметър не се поддържа от всички браузъри).
Повече информация:
http://php.net и http://www.ietf.org/rfc/rfc2109.txt
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
Параметри на функцията:
$name- задължителен параметър. Съдържа името на бисквитката, което се съхранява в променливата $_COOKIE.
$value- незадължителен параметър. Съдържа стойността на променливата $name. Стойността ѝ се връща от глобалната променлива $_COOKIE[“име на бисквитката”]
$expire- незадължителен параметър. Срока на годност на бисквитката :). Времето закоето бисквитката се съхранява на клиентския компютър.
Ако тази стойност не е определена, трайността на бисквитката е до момента, в който браузърът се затвори. Ако браузърът е конфигуриран да съхранява бисквитки, той ще ги съхранява до датата на изтичането им.
$path- незадължителен параметър. Определя директорията, за която бисквитката е валидна. Единична наклонена черта означава, че бисквитката е валидна за всички директории.
$domain- незадължителен параметър. Определя името на домейна и трябва да съдържа най-малко две точки, за да бъде валидно. Бисквитките са валидни за хоста и домейна, който ги е създал.
$secure- незадължителен параметър. Стойността на този параметър може да е 1, което показва, че бисквитката ще бъде предадена през защитена HTTPS връзка или 0, което показва, че бисквитката ще се предаде през обикновена HTTP връзка.
$httponly- незадължителен параметър. Когато е TRUE, бисквитката е достъпна единствено през HTTP протокол. Което означава, че бисквитката няма да е достъпна при използване на скриптов език, подобно на Java Script. Тази опция е полезна за намаляване на опасността от XSS атаки (този параметър не се поддържа от всички браузъри).
Повече информация:
http://php.net и http://www.ietf.org/rfc/rfc2109.txt
Уеб протоколите и уеб сървърите поставят ограничения за броя на бисквитките от сървър до потребител.
Тестване на браузъра ви: http://browsercookielimits.squawky.net/
Ще създадем две бисквитки bgcolor и textcolor, които ще имат стойност на атрибута $expire- 1час.
Тестване на браузъра ви: http://browsercookielimits.squawky.net/
Създаване на бисквитки
Ще създадем две бисквитки bgcolor и textcolor, които ще имат стойност на атрибута $expire- 1час.
- Отворете текстовия редактор.
- Създайте нов документ.
- Дайте му наименование “create_cookie.php”.
- Въведете скрипта:
<!DOCTYPE> <?php //Създава бисквитките $bgcolor = "blue"; $textcolor = "yellow"; setcookie("bgcolor", "$bgcolor", time()+3600, "/","", 0); setcookie("textcolor", "$textcolor", time()+3600, "/", "", 0); ?> <html> <head> <title>Бисквитка с PHP</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php //Съобщенията се извеждат само, ако бисквитките са поставени echo "Противоположностите се привличат." . "<br>"; echo "За да се привлекат едноименни заряди, е необходимо" . "<br>"; echo "да им се предаде енергия, която да им бъде достатъчна," . "<br>"; echo "за да се сблъскат и от сблъсъка им" . "<br>"; echo "да се роди нещо ново и по-красиво!" . "<br>"; ?> </body> </html>
Обърнете внимание на местоположението на бисквитките- непосредствено след тага <!DOCTYPE> (от ред 3 до ред 9). - Съхранете файла.
- Качете го на сървъра.
- Тествайте в браузъра.

Достъп до бисквитките
Достъп до бисквитките можем да получим чрез глобалната променлива $_COOKIE.
- Отворете текстовия редактор.
- Създайте нов документ.
- Дайте му наименование “access_cookies.php”.
- Въведете скрипта:
<!DOCTYPE> <?php //Създава бисквитките $name_1 = "BGcolor"; $name_2 = "Textcolor"; $bgcolor = "blue"; $textcolor = "yellow"; setcookie("$name_1", "$bgcolor", time()+3600, "/","", 0); setcookie("$name_2", "$textcolor", time()+3600, "/", "", 0); //Проверява дали бисквитките са създадени if (isset ($_COOKIE["$name_1"], $_COOKIE["$name_2"])) { //Достъп до бисквитките echo "Цветът на фона е " . $_COOKIE[$name_1] . "<br />" . "Цветът на текста е " . $_COOKIE[$name_2 ] . "<br />"; } ?> <html> <head> <title>Достъп до бисквитките</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php echo "<p style= \"color: blue\">Не е ли? Е, ще стане, имайте малко търпение! :)</p>"; ?> </body> </html>
- Съхранете файла.
- Качете го на сървъра.
- Тествайте в браузъра.

Изтриване на бисквитките
Как да изтрием бисквитките? Прозвуча ми като “Как да убиеш чудовище?". :)
Просто създаваме бисквитка, като поставяме за стойност на параметъра $expire, дата, която вече е преминала.
- Отворете текстовия редактор.
- Създайте нов документ.
- Дайте му наименование “delete_cookies.php”.
- Въведете скрипта:
<!DOCTYPE> <?php //Изтрива бисквитките setcookie("", "", time()- 60, "/","", 0); setcookie("", "", time()- 60, "/", "", 0); ?> <html> <head> <title>Изтриване на бисквитки с PHP</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php echo "Бисквитките са премахнати.” . “<br>”; ?> </body> </html>
- Съхранете файла.
- Качете го на сървъра.
- Тествайте в браузъра.

|
Няма коментари:
Публикуване на коментар