Мені потрібно дістати всі файли cookie з браузера


106

Мені потрібно отримати всі файли cookie, які зберігаються в моєму браузері за допомогою JavaScript. Як це можна зробити?


5
nayagi, на жаль, якщо ми відповімо на ваше запитання, у вас було б програмне забезпечення, яке не менше, ніж MALWARE.
Джон Лім’яп

19
@Jon Limjap - це не зовсім так. Існує законний сценарій, коли можна перерахувати всі файли cookie у веб-браузері без зловмисного програмного забезпечення.
Франці Пенов

Зачекайте секунду. Все печиво? Вхід з будь-якого веб-сайту? Це зловмисне програмне забезпечення ...
alexyorke

У мене є ситуація (веб-додатки за брандмауером для бізнесу), коли це було б зручно і цілком законно. Однак проблема існує тому, що у нас занадто багато внутрішніх доменів (переважно через віртуальних хостів), щоб можна було стверджувати, що рішення полягає у використанні Single Sign On.
ClubbedAce

Відповіді:


84

Ви можете отримувати доступ до файлів cookie лише для певного сайту. Використовуючи, document.cookieви отримаєте список пар, що увійшли, = значення, відокремлених крапкою з комою.

secret=do%20not%20tell%you;last_visit=1225445171794

Щоб спростити доступ, потрібно проаналізувати рядок та скасувати всі записи:

var getCookies = function(){
  var pairs = document.cookie.split(";");
  var cookies = {};
  for (var i=0; i<pairs.length; i++){
    var pair = pairs[i].split("=");
    cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
  }
  return cookies;
}

Тому згодом ви можете написати:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"

5
це не потрапляє пробіл після крапки з комою (";"), тому клавіші мають пробіл в передній частині ... use /; ? / при розщепленні для їх видалення?
Carter Cole

Перевірте цей фрагмент на розбір document.cookies(з книги O'Reilly).
Bentley4

слід дійсно додати .trim () до пари [0], щоб переконатися, що немає провідних пробілів.
Ендрю Кіллен

37
  1. Ви не можете бачити файли cookie для інших сайтів.
  2. Ви не можете бачити HttpOnlyфайли cookie.
  3. Усі файли cookie, які ви можете бачити, знаходяться у document.cookieвластивості, яка містить розділений крапкою з комою список name=value.

27

Ви не можете. Конструюючи, з метою безпеки, ви можете отримати доступ лише до файлів cookie, встановлених вашим сайтом. StackOverflow не бачить файлів cookie, встановлених UserVoice, ані тих, які встановлює Amazon.


5
як це робив facebook ...? Я завжди бачив у фейсбуці шоу оголошень, пов’язаних із тим, що я переглядав у Google!
Арі

16
Власне, Facebook встановлює власні файли cookie на кожному сайті ... за допомогою своєї кнопки Like. Б'юсь об заклад, що Google робить те саме на кнопках +1 або навіть на скриптах статистики сайту.
PhiLho

1
дякую ..., це відкриває мені очі. Я думаю, що будь-який додаток, пов’язаний із ними, буде робити, включаючи вхід у систему, використовуючи додаток для акаунтів у соціальних мережах.
Арі

2
@SoursopTree - Чи не це AdChoices? Facebook використовує AdChoices - службу Google, яка відображає вміст на основі ваших пошукових запитів через Google. Stackoverflow також використовує AdChoices. Я можу трохи розібратися в точних подробицях - але я б здогадався, що це саме ви думаєте.
Рік

1
@KeepMove цю термінологію ми називаємо синхронізацією файлів cookie
ericdemo07

12

Щоб отримати всі файли cookie для поточного документа, відкритого в браузері, ви знову використовуєте document.cookieвластивість.


4

Сучасний підхід.

let c = document.cookie.split(";").reduce( (ac, cv, i) => Object.assign(ac, {[cv.split('=')[0]]: cv.split('=')[1]}), {});

console.log(c);

;)


2

Оскільки в заголовку не вказано, що він повинен бути програмним, я вважаю, що це справжня проблема налагодження / управління конфіденційністю, і рішення залежить від браузера і вимагає браузера з вбудованою детальною системою керування файлами cookie та / або модулем налагодження або плагін / розширення. Я збираюся перерахувати одне і попросити інших записатись у браузери, які вони детально знають, і будь ласка, будьте точні з версіями.

Хром, залізобетон (SRWare Iron 4.0.280)

Меню гайкового ключа (інструмента): Параметри / Під The ​​Hood / [Показати файли cookie та дозволи веб-сайту] Для пов’язаних доменів / сайтів введіть суфікс у поле пошуку (наприклад, .foo.tv). Caveat: якщо у вас є вузол (сайт або cookie), виділеним клацанням, використовуйте лише [Remove] для вбивства конкретних підкреслень. Використовуючи [Видалити все], все одно буде видалено файли cookie для всіх веб-сайтів, вибраних шляхом пошуку, і витратити ваш сеанс налагодження.


1

Додано ключ trim () до ключа в об’єкті та назвемо його str, тому було б зрозуміліше, що ми маємо справу з рядком.

export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});


0

Те, що ви просите, можливо; але це працюватиме лише в певному браузері. Для цього потрібно розробити додаток для розширення браузера. Ви можете прочитати більше про хромовані api, щоб краще зрозуміти.https://developer.chrome.com/extensions/cookies

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.