Новости

Тестування Cookie. їмо печеньки

Практично будь-який сучасний веб додаток, хочете ви того чи ні, використовує кукі. І, природно, що вони, як і будь-яка інша частина програми, вимагають уваги з боку тестувальника. Так давайте ж спробуємо розібратися, що таке куки і з чим їх їдять, а головне - навіщо.

Кукі - хто вони?


Перш ніж приступати до тестування куки, непогано було б з'ясувати, що ж вони з себе представляють. Давайте спробуємо це зробити.


Отже, куки - це певний обсяг даних, створений веб сервером і зберігається на клієнтській машині як файл, який згодом може бути переданий клієнтським ПО назад на веб сервер в HTTP-запиті. Призначення куки - зберігання призначених для користувача даних на клієнтському комп'ютері. Ці дані необхідні для того, щоб боротися з деякими недоліками HTTP-протоколу, а також для реалізації будь-яких корисних речей, про які ми розповімо пізніше.


Мабуть, варто пояснити, що мається на увазі під боротьбою з недоліками HTTP-протоколу. Справа в тому, що цей протокол не вміє зберігати свого стану, тобто користуючись засобами одного лише HTTP у вас ніколи не вийде відстежити взаємозв'язок між парами «запит-відповідь». На практиці це означає наступне - наприклад, на вашому сайті існують три сторінки page1.htm, page2.htm і page3.htm, на сайт приходять два користувача, один з яких спочатку переглядає сторінку page1.htm, а другий page3.htm, потім обидва переходять на сторінку page2.htm, так ось, в цьому випадку ніякої різниці між запитами першого і другого користувача на отримання цієї сторінки не буде, тобто веб сервер не зможе дізнатися, які сторінки відвідували користувачі до того, як зібралися перейти на сторінку page2.htm.


Друга проблема при використанні HTTP полягає в тому, що для кожного запиту протокол встановлює нову TCP-сесію, а завершивши цикл «запит-відповідь» відразу ж її закриває. Це значно ускладнює ідентифікацію користувача, оскільки позбавляє можливості реалізувати аутентифікацію засобами самого протоколу (HTTP-аутентифікацію в розрахунок не беремо, тому що вона вимагає пересилання облікових даних при кожному зверненні до сервера). Справедливості заради, відзначу, що в HTTP1.1 була реалізована можливість здійснювати кілька запитів в рамках однієї TCP-сесії, але ... це абсолютно інша історія ... :)


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

  • ім'я куки,
  • безпосередньо призначена для користувача інформація,
  • ім'я домену якого належить куки,
  • шлях в межах домену, для якого ця куки дійсна,
  • тип з'єднання, при якому вона повинна передаватися (з використанням SSL або без),
  • час протягом якого куки вважається дійсною.


Коротше кажучи, в реальному житті це виглядає приблизно так:
Коротше кажучи, в реальному житті це виглядає приблизно так:


Де і як зберігати куки (і зберігати їх взагалі) визначає, безпосередньо, клієнтське ПЗ (найчастіше браузер). Час, протягом якого куки будуть зберігається в клієнтському ПО, може варіюватися, і задається для кожної куки окремо. Виходячи з часу зберігання, куки діляться на сесійні (ті які будуть видалені відразу після закриття сесії між браузером і сервером) і постійні (ті які будуть видалені після дати певної в поле Expires).


Передача куки від серверного ПО до клієнтського здійснюється в HTTP-запиті, шляхом додавання в нього поля Set-Cookie, в зворотному напрямку куки пересилаються в поле Cookie.


На цьому коротка розповідь про те, що таке куки варто закінчити. Найбільш цікавим, я порекомендую вивчити специфікацію RFC2965 і википедию, а ми поки що спробуємо з'ясувати, для чого куки застосовуються в реальних веб додатках.
Кукі - навіщо вони?


Що ж можна робити за допомогою куки? Насправді, безліч речей без яких важко уявити сучасний веб, а саме:


1.Аутентіфікація
Багато веб додатки вимагають аутентифікації для доступу до деяких функцій або даними. Прикладом таких додатків, може служити і сайт на якому ви зараз перебуваєте, адже для того щоб додати коментар або завантажити якийсь файл вам необхідно ввести свій логін і пароль. Начебто, нічого незвичайного, але давайте задумаємося ось над чим - ви вводите пароль всього лише один раз, але при цьому можете додати десяток коментарів або завантажити десяток файлів. Як же сайт «дізнається» вас і чому не просить повторювати процедуру аутентифікації кожен раз? Все просто. Після того як ви ввели свій логін і пароль, сервер згенерував для вас унікальний ключ і відправив його у вигляді куки вашому браузеру. Тепер, при запиті кожної нової сторінки, браузер відправляє цю куки назад на сервер, який, в свою чергу, звіряє ключ записаний в ній зі списком ключів відомих йому користувачів, після чого і приймає рішення про те, яку ж сторінку вам віддавати і які дії вам вирішувати, а які ні. Більш того, ця куки не видаляється, після того як ви залишаєте сайт, а зберігається в вашому браузері протягом декількох днів, позбавляючи вас від необхідності проходити процедуру логіна при наступних відвідинах.


2. Персоналізація
Часто веб сайти дозволяють користувачам змінювати деякі параметри відображення сторінок, наприклад, кольорове оформлення або мову інтерфейсу. Знову ж, цілком звична річ, якби не одне але, деякі веб сайти дозволяють робити це навіть нерозпізнаних користувачів. Де ж зберігаються ці налаштування? Правильно - в куки. Як приклад, погляньте на всіма улюблений / нелюбимий Вконтакте. Спробуйте змінити мову на сторінці реєстрації, а після закрити вікно браузера і знову відкрити цю ж сторінку. Як не дивно, мова залишиться тим же, що ви вибрали перед тим як закрити браузер, а все це завдяки куки під назвою remixlang, що містить код обраного вами мови.

3. Збір статистики
Цілком природно, що кожен власник веб сайту бажає знати хто, коли, навіщо і чому відвідував його ресурс. І ще більш природно, що це бажання веб майстрів знайшло свою реалізацію в десятках і сотнях сервісів інтернет-статистики. І, звичайно ж, робота цих сервісів була б неможлива без куки. Чому? Та тому, що без використання куки вони були б, м'яко кажучи, не приносять користі, адже в цьому випадку надається ними інформація обмежувалася б списком IP адрес з часом відвідування, полем referer і даними про призначеному для користувача оточенні (ОС, браузер і т.п.). Практична користь від такого роду статистики прагне до нуля, тим більше, що кількість унікальних відвідувань веб майстра в стані порахувати і самі, не вдаючись до сторонньої допомоги. Про це знають і творці подібних сервісів, і тому безсовісно захаращують ваш браузер безліччю різних куки, які згодом дозволять відповісти на питання, так що цікавлять власників сайтів: «Хто приходив?», «Навіщо приходив?», «Через скільки повернувся?», « скільки часу провів? »,« Що ще відвідував? ». Не вірите, що за вами спостерігають лише за допомогою куки? Тоді поновіть сторінку;)

4. Інтернет-маркетинг
Крім того, що куки використовуються для збору статистики, вони ще й успішно застосовуються для отримання прибутку з цієї ж статистики. Погляньте, на Яндекс-Директ, Google AdSense або будь-який інший рекламний сервіс. Напевно, ви без зусиль знайдете взаємозв'язок показуються вам оголошень не тільки з тематикою сайту на якому ви зараз перебуваєте, але і з тематиками сайтів які ви відвідували раніше і навіть з пошуковими запитами введеними раніше в Yandex або Google. Такий таргетинг, знову ж таки, зобов'язаний своїм існуванням куки, адже саме куки записані в ваш браузер дозволяють рекламної мережі вибирати тематику оголошень, яка потенційно може бути цікава саме вам.
5. Кошики в інтернет-магазинах
Ще одним яскравим прикладом використання куки, є кошика в інтернет магазинах. Рідко який магазин буде ризикувати потенційним покупцем, змушуючи його реєструватися, тому клієнтам дозволено робити покупки ввівши всього лише найнеобхідніші контактні дані. Все б добре, але як бути з покупцями які не бажають реєструватися, але при цьому хочуть придбати кілька товарів? В такому випадку, навряд чи вдасться зберегти список товарів в їх кошику звичайним способом, тому для реалізації подібного функціоналу знову вдаються до використання куки, в яку записується унікальний ідентифікатор, що відповідає певному набору товарів в кошику.
Все описане вище, лише невелика частина того, що можна реалізувати за допомогою куки. Але на мій погляд, наведених прикладів досить для того, щоб усвідомити наскільки важливі куки в сучасному Інтернеті, і щоб у вас більше не виникло сумнівів в тому, що вони потребують в тестуванні. Тому давайте перейдемо до тієї частини, заради якої, власне, і затівалося написання цей статті. Отже, тестування.
Кукі - що тестувати?


1.Переконайтеся, що в куки не зберігається конфіденційна інформація
В ідеальному випадку конфіденційних даних в куки бути не повинно. Чому? Та тому, що ніякого вбудованого механізму захисту в куки немає, і, при необхідності, до них зможе отримати доступ хто завгодно. Якщо ж у вас немає вибору і в куки доводиться зберігати подібні дані, то переконаєтеся, що вони не зберігаються у відкритому вигляді і, що застосовується шифрування, насправді, не є чимось на зразок енкод в Base64.

2. Перевірте кількість використовуваних куки
Чіткої відповіді на питання про те, скільки має бути куки - немає. Не можна сказати, що 10 куки - добре, а 12 - погано. Тут, скоріше, потрібно керуватися принципом - чим менше тим краще. Мала кількість куки зможе вберегти від нервового зриву багатьох корпоративних користувачів або звичайних параноїків, у яких в браузері включена опція «Ask me before accepting cookies». Також не варто забувати, що кількість прийнятих браузером куки теж не нескінченно. Для більшості сучасних браузерів дана цифра коливається в районі 50 штук для одного домену. До речі, якщо у вашому проекті, кількість куки почав наближатися до цієї позначки, то ... ви явно щось робите не так. :)

3. Переконайтеся, що додаток зберігає свою працездатність при відключеному або вибірковому прийомі куки
Якщо додаток активно використовує кукі, то, швидше за все, воно не буде функціонувати належним чином, в разі якщо їх прийом буде відключений в браузері. Але, в той же час, його поведінка повинна залишатися адекватним, тобто додаток не повинно сипати ексепшенамі і викидати різного роду Server Error'и, замість цього вона повинна ненав'язливо :) пропонувати користувачеві включити прийом куки. Те ж саме стосується і вибіркового прийому куки. Для того, щоб приймати куки вибірково, просто включите в своєму браузері опцію «Питати мене перед тим як приймати куки» і спробуйте прийняти, наприклад, тільки половину з усіх куки відправляються сайтом.
4. Переконайтеся, що додаток адекватно реагує на видалення куки вручну
Просто закрийте тестований сайт і видаліть всі куки записані ним з вашого браузера, після чого знову відкрийте сайт і спостерігайте за тим, що буде з ним відбуватися. А відбуватися ... не має, зовсім, нічого. Додаток має залишатися повністю працездатним.
5. Перевірте реакцію програми на пошкоджені куки
Ніхто не застрахований від того, що при передачі даних від сервера до клієнта або навпаки не відбудеться ніяких збоїв, які можуть спричинити за собою порушення цілісності даних. Природно, що в такій ситуації можуть бути пошкоджені і куки, тому спробуйте пошкодити їх навмисно, після чого поспостерігайте за поведінкою тестованого програми.
6. Переконайтеся, що куки записуються і видаляються саме на тих сторінках на яких це очікувано і необхідно
Якщо у вашому додатку куки використовуються для відстеження будь-яких дій користувача (наприклад, створення тікетів в системах технічної підтримки, або оформлення замовлень в інтернет-магазинах), то вам варто перевірити, що відповідні куки створюються саме в той момент, коли користувач ініціює деякий нове дію і видаляються після завершення дії. Наприклад, при оформленні замовлення в інтернет-магазині, при якому користувачеві необхідно послідовно заповнити форми на декількох сторінках, куки повинні створюватися в момент натискання на кнопку «Оформити замовлення», а віддалятися після того, як всі необхідні дані будуть відправлені на сервер (до речі, при цьому повинні віддалятися не тільки куки, які «супроводжували» користувача в процесі оформлення замовлення, а й ті, які, відповідають за вміст кошика з товарами).
7. Перевірте, що куки коректно працюють у всіх браузерах з якими буде використовуватися додаток
Всі вже давно звикли до кросбраузерності тестування, оскільки знають, що у кожного браузера свій норов, і тому поведінка додаток може різнитися від браузера до браузеру. Але, здавалося б, до чого тут куки? Начебто, все сучасні браузери декларують підтримку DOM1 і надають практично однаковий механізм доступу до кукі. Але, тим не менш, проблеми можливі і тут, наприклад, в разі якщо куки встановлюються / читаються за допомогою JavaScript (про кросбраузерності JS-скриптів, сподіваюся, розповідати не потрібно :)), або сам браузер має свої власні бзики з цього приводу, наприклад, такі або такі собі .
8. Перевірте, що доступ до різних частин програми не може бути здійснений в обхід куки, які використовуються для аутентифікації або авторизації
Деякі веб сайти передають ідентифікатори користувачів у відкритому вигляді, наприклад, в URL. Природно, що при підміні цих ідентифікаторів, не повинно бути можливості отримання доступу до акаунтів інших користувачів. Щоб було зрозуміліше про що йде мова, спробуйте залогінитися і перейти на сторінку редагування свого профілю на цьому сайті, після чого спробуйте замінити ваш UserID, вказаний в URL на будь-який інший (наприклад, спробуйте відредагувати ось цей профіль http://iqa.com. ua / user / 16 / edit).
На цьому мабуть все. Тим хто, очікував побачити в цій замітці що-небудь про XSS, приношу свої вибачення :). Думаю, що ця тема хоч і стосується куки, але, все ж, вимагає окремого обговорення.
Вдалого разгризанія печенек, сподіваюся, що тепер у ваших зубів більше шансів залишитися цілими :)
Думки навіяні статтею «Website Cookie Testing, Test cases for testing web application cookies?»

Кукі - хто вони?
Кукі - навіщо вони?
Що ж можна робити за допомогою куки?
Як же сайт «дізнається» вас і чому не просить повторювати процедуру аутентифікації кожен раз?
Де ж зберігаються ці налаштування?
Чому?
Про це знають і творці подібних сервісів, і тому безсовісно захаращують ваш браузер безліччю різних куки, які згодом дозволять відповісти на питання, так що цікавлять власників сайтів: «Хто приходив?
», «Навіщо приходив?
», «Через скільки повернувся?
», « скільки часу провів?

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

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: