Як я можу однозначно ідентифікувати комп'ютери, які відвідують мій веб-сайт?


184

Мені потрібно розібратися, як однозначно визначити кожен комп’ютер, який відвідує веб-сайт, який я створюю. Хтось має поради, як цього досягти?

Оскільки я хочу, щоб рішення працювало на всіх машинах і в усіх браузерах (в межах причини), я намагаюся створити рішення за допомогою JavaScript.

Печиво не обійдеться.

Мені потрібна можливість в основному створити орієнтир, який є унікальним для комп'ютера та повторюваним, якщо припустити, що на комп'ютері не відбулося жодних змін обладнання. Вказівки, про які я думаю, отримують MAC мережевої карти та іншу подібну інформацію, яка дозволить ідентифікувати машину, яка відвідує веб-сайт.


4
Ви не можете отримати mac їхньої мережевої карти - IP-адреси не містять цієї інформації, найкраще, що ви можете отримати - це IP-адреса їх шлюзу провайдера. Для деяких Інтернет-провайдерів, які можуть бути однаковими для всіх користувачів у даному місті.
Мартін Бекетт

1
Справа в тому, що ви не хочете, щоб користувач міг його сфабрикувати. Відповідь, звичайно, цього неможливо зробити без вашого приватного компонента, встановленого на машині користувачів.
AnthonyWJones

MAC адреси тривіально легко підробляти. Моє крихітне бездротове з'єднання пройде через ваш MAC, замінить його власне або використає вказане вами.
Кент Брюстер

Цього не вдається зробити - кукі - найкраща ставка
Draemon

Будь ласка, прочитайте мою відповідь на цій сторінці. У мене дуже гарна ідея для цієї проблеми :)
Махді Джазіні

Відповіді:


58

Ці люди розробили метод відбитків пальців для розпізнавання користувача з високим рівнем точності:

https://panopticlick.eff.org/static/browser-uniqueness.pdf

Ми досліджуємо ступінь, в якому сучасні веб-браузери підлягають «відбитка пальців на пристрої» через інформацію про версію та конфігурацію, які вони передаватимуть на веб-сайти за запитом. Ми реалізували один можливий алгоритм відбитків пальців і зібрали ці відбитки пальців із великої вибірки браузерів, які відвідали нашу тестову сторону, panopticlick.eff.org. Ми зауважуємо, що розподіл нашого відбитка пальців містить щонайменше 18,1 біт ентропії, це означає, що якщо ми виберемо браузер навмання, у кращому випадку ми очікуємо, що лише один із 286 777 інших браузерів поділиться його відбитком. Серед браузерів, які підтримують Flash або Java, ситуація гірша: середній браузер містить не менше 18,8 біт ідентифікаційної інформації. 94,2% браузерів із Flash або Java були унікальними у нашому зразку.

Спостерігаючи за поверненими відвідувачами, ми оцінюємо, як швидко з часом можуть змінюватися відбитки браузера. У нашому зразку відбитки пальців змінювались досить швидко, але навіть простий евристик зазвичай міг здогадатися, коли відбиток пальця був «оновленою» версією відбитків раніше спостережуваного браузера, при цьому правильність 99,1% здогадів та помилково позитивна ставка лише 0,86% .

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


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

10
@Oliver Ви маєте рацію. Це не дає відповіді на тарілці. Це вимагає подальшого читання, розуміння всіх проблем, і чому простий фрагмент коду навряд чи колись повністю спрацює. Заповзятливий розробник може написати бібліотеку, яка б наполегливо працювала, і давати можливість людям, які шукають «швидке рішення», отримати користь у майбутньому.
Джонатан

2
Відповідь також лише посилання. Короткий огляд методів, описаних у PDF, буде вдячний у випадку, якщо PDF не буде доступний.
Damian Yerrick

2
Дивіться моя відповідь тут для пакета з відкритим вихідним кодом і простого Ішем способу реалізації зняття відбитків пальців stackoverflow.com/a/47536192/3650835
KayakinKoder

Тож я краще
Луїс Маурісіо

49

Вступ

Я не знаю, чи знайдеться чи коли-небудь спосіб однозначно визначити машини за допомогою браузера. Основні причини:

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

Навіть якщо існують способи відстеження комп'ютера без використання файлів cookie, завжди знайдеться спосіб обійти його та програмне забезпечення, яке зробить це автоматично. Якщо вам дійсно потрібно відслідковувати щось на базі комп'ютера, вам доведеться написати нативну програму (Apple Store / Android Store / Windows Program / тощо).

Я, можливо, не зможу дати вам відповідь на поставлене вами питання, але я можу показати вам, як реалізувати відстеження сеансу. За допомогою відстеження сеансу ви намагаєтеся відстежувати сеанс перегляду замість комп'ютера, який відвідує ваш сайт. Відстежуючи сеанс, схема вашої бази даних буде виглядати так:

sesssion:
  sessionID: string
  // Global session data goes here

  computers: [{
     BrowserID: string
     ComputerID: string
     FingerprintID: string
     userID: string
     authToken: string
     ipAddresses: ["203.525....", "203.525...", ...]
     // Computer session data goes here
  }, ...]

Переваги відстеження на основі сеансу:

  1. Для користувачів, які ввійшли в систему, ви завжди можете генерувати той самий ідентифікатор сеансу у користувачів username/ password/ email.
  2. Ви все ще можете відстежувати гостьових користувачів за допомогою sessionID.
  3. Навіть якщо кілька людей використовують один і той же комп’ютер (тобто кіберкафе), ви можете відстежувати їх окремо, якщо вони входять.

Недоліки сеансу відстеження:

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

Впровадження

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

Основи

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

Для цього я використовую механізм кешування браузерів ( RFC ), API WebStorage ( MDN ) та файли cookie браузера ( RFC , Google Analytics ).

Юридичні

Щоб використовувати ідентифікатори відстеження, вам потрібно додати їх як до політики конфіденційності, так і до умов використання, бажано в підзаголовку Відстеження . Ми будемо використовувати наступні клавіші на обох document.cookieта window.localStorage:

  • _ga : дані Google Analytics
  • __utma : cookie для відстеження Google Analytics
  • sid : SessionID

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

Де зберігати дані сеансу?

Дані сеансу можна зберігати в базі даних вашого веб-сайту або на комп'ютері користувачів. Оскільки я зазвичай працюю на менших сайтах (нехай 10 тисяч безперервних з'єднань), які використовують додатки сторонніх розробників (Google Analytics / Clicky / тощо), для мене найкраще зберігати дані на комп'ютері клієнтів. Це має такі переваги:

  1. Немає пошуку баз даних / накладних витрат / завантаження / затримки / простору / тощо
  2. Користувач може видаляти свої дані, коли захоче, без необхідності писати мені набридливі електронні листи.

і недоліки:

  1. Дані повинні бути зашифровані / розшифровані та підписані / перевірені, що створює накладні витрати на клієнта (не так вже й погано) та сервера (так!).
  2. Дані видаляються, коли користувач видаляє файли cookie та кеш. (цього я дійсно хочу)
  3. Дані недоступні для аналітики, коли користувачі виходять з мережі. (аналітика лише для користувачів, які зараз переглядають)

UUIDS

  • BrowserID : унікальний ідентифікатор, сформований із рядка агента користувача браузера.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : Створений від користувачів IP-адресою та ключем сеансу HTTPS. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : відбитки пальців на основі JavaScript на основі модифікованого fingerprint.js .FingerPrint.get()
  • SessionID : Випадковий ключ, що створюється, коли користувач відвідує сайт.BrowserID|ComputerID|randombytes(256)
  • GoogleID : створено з __utmaфайлів cookie.getCookie(__utma).uniqueid

Механізм

Днями я переглядав шоу Венді Вілліамс зі своєю подругою і був зовсім зляканий, коли ведуча порадила своїм глядачам принаймні раз на місяць видаляти історію веб-переглядачів. Видалення історії браузера зазвичай має такі ефекти:

  1. Видаляє історію відвідуваних веб-сайтів.
  2. Видаляє файли cookie та window.localStorage(aww man).

Більшість сучасних браузерів робить цей варіант доступним, але не бояться друзів. Бо є рішення. У браузері є механізм кешування для зберігання скриптів / зображень та інших речей. Зазвичай навіть якщо ми видалимо нашу історію, цей кеш браузера все ще залишається. Все, що нам потрібно - це спосіб зберігати наші дані тут. Існує 2 способи зробити це. Краще використовувати зображення SVG та зберігати наші дані всередині своїх тегів. Таким чином, дані все ще можуть бути вилучені, навіть якщо JavaScript вимкнено за допомогою flash. Однак оскільки це трохи складніше, я продемонструю інший підхід, який використовує JSONP ( Wikipedia )

example.com/assets/js/tracking.js (насправді track.php)

var now = new Date();
var window.__sid = "SessionID"; // Server generated

setCookie("sid", window.__sid, now.setFullYear(now.getFullYear() + 1, now.getMonth(), now.getDate() - 1));

if( "localStorage" in window ) {
  window.localStorage.setItem("sid", window.__sid);
}

Тепер ми можемо отримати наш ключ сеансу будь-коли:

window.__sid || window.localStorage.getItem("sid") || getCookie("sid") || ""

Як зробити так, щоб track.js дотримувався браузера?

Ми можемо добитися цього з допомогою Cache-Control , Last-Modified і ETag HTTP заголовки. Ми можемо використовувати SessionIDзначення для заголовка етагу:

setHeaders({
  "ETag": SessionID,
  "Last-Modified": new Date(0).toUTCString(),
  "Cache-Control": "private, max-age=31536000, s-max-age=31536000, must-revalidate"
})

Last-ModifiedЗаголовок повідомляє браузеру, що цей файл в основному ніколи не змінюється. Cache-Controlповідомляє проксі та шлюзи не кешувати документ, але повідомляє браузеру кешувати його протягом 1 року.

Наступного разу, коли браузер вимагає документ, він надсилатиме If-Modified-Sinceі If-None-Matchзаголовки. Ми можемо використовувати їх для повернення 304 Not Modifiedвідповіді.

example.com/assets/js/tracking.php

$sid = getHeader("If-None-Match") ?: getHeader("if-none-match") ?: getHeader("IF-NONE-MATCH") ?: ""; 
$ifModifiedSince = hasHeader("If-Modified-Since") ?: hasHeader("if-modified-since") ?: hasHeader("IF-MODIFIED-SINCE");

if( validateSession($sid) ) {
  if( sessionExists($sid) ) {
    continueSession($sid);
    send304();
  } else {
    startSession($sid);
    send304();
  }
} else if( $ifModifiedSince ) {
  send304();
} else {
  startSession();
  send200();
}

Тепер кожен раз, коли браузер запитує tracking.jsнаш сервер, буде відповідати 304 Not Modifiedрезультатом і змушувати виконувати локальну копію tracking.js.

Я досі не розумію. Поясніть це мені

Припустимо, користувач очищає історію перегляду та оновлює сторінку. Єдине, що залишилося на комп'ютері користувачів - це копія tracking.jsкешу браузера. Коли браузер вимагає, tracking.jsвін отримує 304 Not Modifiedвідповідь, яка змушує його виконати першу tracking.jsотриману версію . tracking.jsвиконує та відновлює те, SessionIDщо було видалено.

Перевірка

Припустимо, Haxor X викрадає файли cookie наших клієнтів, поки вони все ще ввійшли в систему. Як ми їх захищаємо? Криптографія та відбитки пальців браузера на допомогу. Запам’ятайте наше первісне визначення для SessionID:

BrowserID|ComputerID|randomBytes(256)

Ми можемо змінити це на:

Timestamp|BrowserID|ComputerID|encrypt(randomBytes(256), hk)|sign(Timestamp|BrowserID|ComputerID|randomBytes(256), hk)

Де hk = sign(Timestamp|BrowserID|ComputerID, serverKey).

Тепер ми можемо перевірити наше SessionIDвикористання наступного алгоритму:

if( getTimestamp($sid) is older than 1 year ) return false;
if( getBrowserID($sid) !== createBrowserID($_Request, $_Server) ) return false;
if( getComputerID($sid) !== createComputerID($_Request, $_Server) return false;

$hk = sign(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid), $SERVER["key"]);

if( !verify(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid) + decrypt(getRandomBytes($sid), hk), getSignature($sid), $hk) ) return false;

return true; 

Тепер для того, щоб атака Хаксора спрацювала, вони повинні:

  1. Мають те саме ComputerID. Це означає, що вони повинні мати того самого постачальника провайдерів, що і жертва (Tricky). Це дасть нашій жертві можливість вжити законних дій у власній країні. Haxor також повинен отримати ключ від сеансу HTTPS від жертви (Hard).
  2. Мають те саме BrowserID. Будь-хто може підробити рядок User-Agent (Дратівливо).
  3. Вміти створювати власну підробку SessionID(Дуже важко). Томові атаки не працюватимуть, оскільки ми використовуємо часову марку для генерування ключа шифрування / підпису, так що, як генерування нового ключа для кожного сеансу. Крім того, ми зашифровуємо випадкові байти, тому просту атаку словника також не виникає.

Ми можемо покращити перевірку за допомогою переадресації GoogleIDта FingerprintID(через ajax або приховані поля) та порівняння з ними.

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;

1
це до речі прекрасна відповідь. Стільки інформації. Я здивований, що у вас немає більше коштів. Я, чесно кажучи, не можу повірити, що техніка зі svgs та jsonp існує, але вона повинна. Чи не існує бібліотеки, яка б поверталася до такої методики, коли cookies / localStorage / sessionStorage відключені?
faceyspacey.com

Крім того, мені цікаво, чи існує вдосконалена версія цього просто використовувати ваш кешований файл track.js (або кілька таких файлів), щоб використовувати його як фактично localStorage / cookies, тобто запам'ятовувати безліч даних. Ідея полягала б у тому, щоб у бібліотеці були такі способи як storageFacade.setItemі зберіганняFacade.getItem маніфест . And it tries to use localStorage, but fallsback to your technique when disabled. ..Perhaps the way it works is via a single file for "diffs" i.e. each time you call setItem` . And then a всіх розріз, створених під час сеансу, які автоматично створюються раз у раз.
faceyspacey.com

Якби маніфест створювався лише раз у раз, по суті це обмежувало б кількість створених маніфестів. А потім пізніше в javascript ви можете спробувати запросити всі можливі створені маніфести, а потім використати останній для відновлення стану з різних знімків. Якби у нас було розбіжностей, може бути сотні чи тисячі, і це може бути проблемою продуктивності, щоб спробувати їх отримати, поки один не вдався. Тобто ви отримуєте diff або маніфестувати поступово: manifest-1.js, manifest-2.js тощо, поки один не вийде з ладу (тому що його не існує). Що означає, що у вас є всі маніфести (або
розбіжні

@ faceyspacey.com Вибачте, ніколи не було бібліотек. Вам потрібно кодувати та постійно оновлювати власне власне рішення. Подумай над цим. Як тільки ви розробляєте ліб для цього, всі блокувальні пристрої / браузери / тощо негайно протидіють цьому. Єдина причина, по якій це працює, полягає в тому, що він покладається на дуже важливу основну функцію браузера, яку вони просто не видалять / відключають: CACHING. Я постійно втрачаю свої логіни та паролі. А оскільки я вже не задаю багато питань, мені не потрібно відповідати на багато, щоб я міг залишати щедроту з репутацією. Я щойно це побачив і зрозумів, що реальної відповіді немає.
Вальтер

30

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


7
Якщо він відвідує ваш сайт із 3-ма різними веб-переглядачами, він матиме 3 різні файли cookie, оскільки файли cookie не надаються між додатками. Крім того, якщо він використовує DHCP, а не статичну IP-адресу, він, ймовірно, не буде мати однакову IP-адресу свого комп'ютера надовго.
JohnnySoftware

2
Так і ні. Відбитка пальців браузера ідентифікує профіль браузера з великою часткою ймовірності, але це не абсолютна індивідуальна ідентифікація, яку шукають у цьому питанні. Кмітливому користувачеві цілеспрямовано (але, мабуть, не просто ) досить навмисно обійти, якщо вони бажають.
erickson

30

Можливість використання флеш-файлів cookie :

  • Всюдисуща доступність (95 відсотків відвідувачів, ймовірно, матимуть спалах)
  • Ви можете зберігати більше даних на печиво (до 100 КБ)
  • Спільний доступ у веб-переглядачах, тому більше шансів на унікальну ідентифікацію машини
  • Очищення файлів cookie браузера не видаляє флеш-файли cookie.

Вам потрібно буде скласти невеликий (прихований) флеш-фільм, щоб прочитати та написати їх.

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


5
Багато користувачів використовують Flashblock. Flash активується від користувача одним клацанням, якщо він хоче його побачити.
Horcrux7

3
Існують способи видалення файлів cookie, але вони виходять за межі середнього користувача. На веб-сайті Adobe є сторінки для перегляду та видалення LSO (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object ), хоча для користувачів Firefox надбудова «Об’єкти» - це найпростіший метод їх видалення
Сем Хаслер

Я думаю, що це одне з найкращих рішень. Youtube, Google тощо використовують ЛСО для боротьби зі зловживаннями.
Уку Лоскіт

4
Flash-файли cookie видаляються так само легко, як і HTTP-файли cookie в сучасних версіях Firefox та Chrome: Вікіпедія :Adobe announced that Flash Player 10.3 enables Mozilla Firefox 4 and "future releases of Apple Safari and Google Chrome" to delete local shared objects,[11] so since version 4, Firefox treats LSOs the same way as HTTP cookies - deletion rules that previously applied only to HTTP cookies now also apply to LSOs.
JoJo

4
Ситуація змінилася за останні дев'ять років. В даний час 95 відсотків користувачів навіть не знаходяться на робочому столі, а мобільний ніколи не сприймав Adobe Flash Player.
Damian Yerrick

21

Ви можете спробувати встановити унікальний ідентифікатор у evercookie (він буде працювати у веб-переглядачі, дивіться їхні поширені запитання): http://samy.pl/evercookie/

Існує також компанія під назвою ThreatMetrix, яка використовується багатьма великими компаніями для вирішення цієї проблеми: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Вони досить дорогі і деякі з них інші їх продукти не дуже хороші, але ідентифікатор пристрою працює добре.

Нарешті, є ця реалізація jquery з відкритим кодом для ідеї panopticlick: https://github.com/carlo/jquery-browser-fingerprint На сьогодні вона виглядає наполовину запеченою, але її можна розширити.

Сподіваюся, це допомагає!


+ 1 - Брайан - Відмінна інформація! Це все виявилося дуже корисним. Дякую. Додайте більше інформації, якщо ви з того часу не дізналися більше.
Бен О

1
Щодо вічнококі. Спробував з Opera. Встановити файли cookie, потім видалити всю історію з Opera, потім закрити Opera, знову відкрити клацання Click to rediscover cookiesі побачити або null або undefined. Тож для мене це не працює
Андріс,

Спробувавши зразкову сторінку в режимі інкогніто iOS Safari Private і в режимі анонімного робочого столу Chrome, файл cookie неможливо отримати після перезавантаження браузера.
Моріо

20

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

У статті також розглядаються інші стійкі методи відстеження, такі як evercookies, повторне закладання файлів cookie http та Flash та синхронізація файлів cookie.

Детальніше про дактилоскопію полотна тут:


1
тож якщо два пристрої однакові (однакові пакетні комп'ютери, однаковий ОС, однакові браузери), відбитки пальців однакові, правда?
xiaoyu2er

Справжнім питанням є те, чи є бібліотека javascript, яку я можу ввести у свій код, щоб використовувати це. Читання тонни теорії не вирішує проблем, які необхідно вирішити протягом наступних 60 хвилин.
Танасіс Іоанідіс

11

Є лише невелика кількість інформації, яку можна отримати через HTTP-з'єднання.

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

  2. Useragent String - Практично всі браузери надсилають, який саме браузер вони отримують із кожним запитом. Однак це сьогодні може встановити користувач у багатьох браузерах.

  3. Колекція полів запиту - Є й інші поля, що надсилаються з кожним запитом, наприклад, підтримувані кодування тощо. Вони, якщо вони використовуються в сукупності, можуть допомогти ідентифікувати машину користувача, але знову залежать від браузера і їх можна змінити.

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

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


10

Існують недоліки як у файлах cookie, так і без cookie. Але якщо ви можете пробачити недоліки підходу cookie, ось ідея.

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

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


Чи отримаю я однаковий ідентифікатор, використовуючи getUniqueId()різні браузери в одній машині?
Анкур Аквалія

8

Як і попередні рішення файли cookie є хорошим методом, майте на увазі, що вони ідентифікують браузери . Якщо я відвідав веб-сайт у Firefox, а потім в Internet Explorer, файли cookie зберігатимуться для обох спроб окремо. Деякі користувачі також відключають файли cookie (але більшість людей відключає JavaScript).

Іншим методом, який слід враховувати, буде ідентифікація IP та імені хоста (пам’ятайте, що вони можуть відрізнятись для комутованих / нестатичних користувачів IP; AOL також використовує ковдри IP). Однак оскільки це ідентифікує лише мережі, це може працювати не так добре, як файли cookie.


Хороша точка з IP-адресою, яка визначає точку доступу до мережі - з NAT, цілі країни можуть бути приховані за однією IP-адресою, і ви не будете мудрішими. З дефіцитом адреси IPv4 ви все ще побачите досить великі компанії чи школи / університети, які діляться єдиною IP-адресою для виїзного інтернет-трафіку.
Пісквор вийшов з будівлі

6

Пропозиції щодо використання файлів cookie, єдиний вичерпний набір ідентифікаційних атрибутів, доступних для допиту, містяться в заголовку запиту HTTP. Таким чином, можливо використовувати деяку підмножину з них для створення псевдо-унікального ідентифікатора для агента користувача (тобто браузера). Крім того, більшість цієї інформації, можливо, вже зареєстровано у так званому "журналі доступу" програмного забезпечення вашого веб-сервера за замовчуванням, і, якщо ні, його можна легко налаштувати для цього. Тоді можна було б розробити висловлювання, яке просто сканує вміст цього журналу, створюючи відбитки пальцівкожного запиту, що складається з, скажімо, IP-адреси та рядка агента користувача тощо. Більше наявних даних, навіть включаючи вміст певних файлів cookie, додає якості унікальності цього відбитка пальця. Хоча, як уже багато інших заявили, протокол HTTP не робить це 100% безглуздим - у кращому випадку він може бути лише досить хорошим показником.


6

Коли я використовую машину, яка ніколи не відвідувала веб-сайт мого онлайн-банкінгу, мене просять провести додаткову автентифікацію. потім, якщо я повернуся вдруге на сайт онлайн-банкінгу, я не прошу додаткової автентифікації ... я видалив усі файли cookie в IE і перейшов на свій веб-сайт онлайн-банкінгу, сподіваючись, що мені знову будуть задані питання щодо автентифікації. на моє здивування, мене не запитували. Хіба це не призводить до того, щоб повірити, що банк робить якусь тегів на ПК, які не включають файли cookie?

Це досить поширений тип аутентифікації, який використовують банки.

Скажімо, ви маєте доступ до веб-сайту свого банку через example-isp.com. Перший раз, коли ви там, вам буде запропоновано пароль, а також додаткова автентифікація. Після того, як ви пройшли, банк знає, що користувач "thatisvaliant" має автентифікацію для доступу до сайту через example-isp.com.

Надалі він не вимагатиме додаткової автентифікації (крім вашого пароля) під час доступу до сайту через example-isp.com. Якщо ви спробуєте отримати доступ до банку через сторінку іншого-isp.com, банк знову пройде той самий розпорядок.

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

У вас коли-небудь дзвонили компанії з кредитних карток, щоб переконатися, що все в порядку, коли ви користуєтесь кредитною карткою в іншій країні? Та сама концепція.


4

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

Якщо ви дійсно хочете ідентифікувати людей , запросіть їх увійти.

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

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

Зрештою, неправильно сказати, що це говорить про те, який комп'ютер вони використовують, якщо ваші користувачі не використовують вашу власну локальну мережу та не мають статичних IP-адрес.

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


3

Файли cookie не будуть корисними для визначення унікальних відвідувачів. Користувач може очистити файли cookie та оновити сайт - потім він знову класифікується як новий користувач.

Я думаю, що найкращий спосіб зробити це - реалізувати рішення на стороні сервера (оскільки вам потрібно буде десь зберігати свої дані). Залежно від складності ваших потреб у таких даних вам потрібно буде визначити, що класифікується як унікальний візит. Розумним методом було б дозволити повернення IP-адреси наступного дня та отримати унікальне відвідування. Кілька відвідувань однієї IP-адреси за один день не слід вважати унікальними.

Наприклад, використовуючи PHP, тривіально отримати IP-адресу відвідувача та зберегти його у текстовому файлі (або базі даних sql).

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

Сподіваюся, що це допомагає.


4
Ми з дружиною переглядаємо чотири різних комп’ютери за NAT брандмауером вдома. Ми виявляємо той самий IP, тому за вашою схемою ми відображаємось як той самий користувач.
Адам Несс

Що робити, якщо в mysql написати додаткові змінні (тут згадується panopticlick.eff.org/browser-uniqueness.pdf )? Тож ip-адреса була б однаковою, але деякі інші характеристики можуть бути різними.
Андріс

3

Оскільки я хочу, щоб рішення працювало на всіх машинах і в усіх браузерах (в межах причини), я намагаюся створити рішення за допомогою JavaScript.

Це не справді вагома причина не використовувати JavaScript?

Як вже говорили інші - печиво, мабуть, найкращий варіант - просто пам’ятайте про обмеження.


3

Можна використовувати fingerprintjs2

new Fingerprint2().get(function(result, components) {
  console.log(result) // a hash, representing your device fingerprint
  console.log(components) // an array of FP components
  //submit hash and JSON object to the server 
})

Після цього ви можете перевірити всіх своїх користувачів на наявних і перевірити схожість JSON, тож навіть якщо їх відбиток пальців мутує, ви все одно можете їх відстежувати


2

Я думаю, що вердикт - я не можу програмно однозначно ідентифікувати комп'ютер, який відвідує мій веб-сайт.

У мене таке питання. Коли я використовую машину, яка ніколи не відвідувала веб-сайт мого онлайн-банкінгу, мене просять провести додаткову автентифікацію. то, якщо я повернусь вдруге на сайт онлайн-банкінгу, я не прошу додаткової автентифікації. читаючи відповіді на моє запитання, я вирішив, що це має бути печиво. тому я видалив усі файли cookie в IE і переніс на свій веб-сайт онлайн-банкінгу, сподіваючись, що мені знову будуть задані питання щодо автентифікації. на моє здивування, мене не запитували. Хіба це не призводить до того, щоб повірити, що банк робить якусь тегів на ПК, які не включають файли cookie?

далі, після багатого гуглінгу сьогодні я знайшов наступну компанію, яка заявляє про продаж рішення, яке унікально визначає машини, які відвідують веб-сайт. http://www.the41.com/products.asp .

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


Виходячи з цього: the41.com/download/… Схоже, їх рішенням є змусити користувача завантажити частину програмного забезпечення, яке створює унікальний ідентифікатор на основі машини та прив’язує його до деяких облікових даних для входу.
mmacaulay

Як уже згадувалося, ви не виключили свій банк, використовуючи файли cookie Flash. Як очистити файли cookie Flash та іншу дискусію з цього питання: tips.vlaurie.com/2007/10/24/…
micahwittman

Моя здогадка: Банк, ймовірно, довіряє, що ви це ви, якщо ви (1) знаєте своє ім'я користувача, (2) знаєте свій пароль, або (3a) отримали їх cookie, або ще (3b) походять з IP-адреси, яку вони раніше мали пов’язаний з вами.
Зак Петерсон

2

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


1

Я думаю, печиво може бути тим, що ви шукаєте; саме так більшість веб-сайтів однозначно ідентифікують відвідувачів.


0

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

Якщо це можливість змусити відвідувача встановити якесь програмне забезпечення та використовувати TCPA, можливо, ви зможете щось зняти.


0

Моя публікація може не бути рішенням, але я можу навести приклад, коли ця функція була реалізована.

Якщо ви www.supertorrents.orgвперше відвідуєте сторінку реєстрації зі свого комп’ютера, це добре. Але якщо оновити сторінку або відкрити її знову, вона визначає, що ви її раніше відвідували. Справжня краса приходить сюди - вона визначає, навіть якщо ви перевстановите Windows або іншу ОС.

Я десь читав, що вони зберігають ідентифікатор процесора. Хоча я не міг знайти, як вони це роблять, я серйозно сумніваюся в цьому, і вони можуть використовувати MAC-адресу для цього.

Я обов'язково поділюсь, якщо знайду, як це зробити.


www.supertorrents.org мертвий
Інструментарій

0

Хитрість:

  1. Створіть 2 сторінки реєстрації:

    Перша сторінка реєстрації: без будь-якої електронної пошти чи перевірки безпеки (лише з ім'ям користувача та паролем)

    Друга сторінка реєстрації: з високим рівнем безпеки (запит на підтвердження електронної пошти та зображення безпеки тощо)

  2. Для задоволення клієнтів та простої реєстрації сторінкою реєстрації за замовчуванням має бути (Перша сторінка реєстрації), але на (Перша сторінка реєстрації) є приховане обмеження. Це обмеження IP-адреси. Якщо IP намагався зареєструватися вдруге (наприклад, менше 1 години), замість того, щоб відображати сторінку блоку. ви можете показати (Другу сторінку реєстрації) автоматично.

  3. на (Перша сторінка реєстрації) ви можете встановити (наприклад: блокувати 2 спроби з 1 ip протягом лише 1 години або 24 години), а після (наприклад) 1 годину ви можете відкрити доступ з цього ip автоматично

Зверніть увагу: (Перша сторінка реєстрації) та (Друга сторінка реєстрації) не повинні знаходитись на окремих сторінках. ви робите всього 1 сторінку. (наприклад: register.php) та зробіть розумним перемикання між першим стилем PHP та другим стилем PHP


Махді Джазіні. Все правильно, але моє запитання полягає в тому, як ви визначите IP-адресу клієнтської машини. Дякую.
JENKINS J
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.