웹 사이트를 방문하는 컴퓨터를 어떻게 고유하게 식별합니까?


184

만들고있는 웹 사이트를 방문하는 각 컴퓨터를 고유하게 식별하는 방법을 찾아야합니다. 아무도 이것을 달성하는 방법에 대한 조언이 있습니까?

솔루션이 모든 컴퓨터와 모든 브라우저에서 작동하기를 원하기 때문에 (이유 내에서) javascript를 사용하여 솔루션을 만들려고합니다.

쿠키는하지 않습니다.

컴퓨터에 하드웨어 변경이 발생하지 않았다고 가정 할 때 기본적으로 컴퓨터에 고유하고 반복 가능한 guid를 만들 수 있어야합니다. 내가 생각하는 방향은 웹 사이트를 방문하는 컴퓨터를 식별하는 네트워크 카드의 MAC 및 이러한 특성의 다른 정보를 얻는 것입니다.


4
네트워크 카드의 mac을 얻을 수 없습니다. IP에는 해당 정보가 포함되어 있지 않습니다. 가장 좋은 방법은 ISP 게이트웨이의 IP 주소입니다. 특정 도시의 모든 사용자에게 동일 할 수있는 일부 ISP의 경우.
Martin Beckett

1
사실 사용자가 스푸핑 할 수 있기를 원하지 않습니다. 대답은 물론 사용자 컴퓨터에 권한이 부여 된 구성 요소가 없으면 수행 할 수 없습니다.
AnthonyWJones

MAC 주소는 스푸핑하기 쉽습니다. 내 초소형 무선 연결이 MAC을 통과하거나 자체 MAC을 대체하거나 지정한 것을 사용합니다.
Kent Brewster

쿠키는 최선의 선택입니다
Draemon

이 페이지에서 내 답변을 읽으십시오. 내가 :이 문제에 대한 아주 좋은 생각이
마흐디 Jazini

답변:


58

이 사람들은 사용자를 높은 정확도로 인식 할 수있는 지문 인식 방법을 개발했습니다.

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

최신 웹 브라우저가 요청시 웹 사이트로 전송할 버전 및 구성 정보를 통해 "장치 지문"에 적용되는 정도를 조사합니다. 가능한 지문 인식 알고리즘 하나를 구현하고 테스트 측인 panopticlick.eff.org 를 방문한 대규모 브라우저 샘플에서 이러한 지문을 수집했습니다. . 우리는 지문 분포에 최소한 18.1 비트의 엔트로피가 포함되어 있음을 관찰합니다. 즉, 브라우저를 임의로 선택하면 286,777 명의 다른 브라우저 중 하나만 지문을 공유 할 것으로 예상됩니다. Flash 또는 Java를 지원하는 브라우저 중에서 상황이 더 나 빠지고 일반 브라우저는 18.8 비트 이상의 식별 정보를 가지고 있습니다. Flash 또는 Java를 사용하는 브라우저의 94.2 %가 샘플에서 독특했습니다.

재 방문자를 관찰하여 시간이 지남에 따라 브라우저 지문이 얼마나 빠르게 변경 될지 추정합니다. 이 샘플에서는 지문이 매우 빠르게 변경되었지만 간단한 휴리스틱조차도 지문이 이전에 관찰 된 브라우저 지문의 "업그레이드 된"버전인지 추측 할 수 있었으며, 99.1 %의 추측이 정확하고 오 탐률이 0.86 %에 불과했습니다. .

우리는 실제로 프라이버시 위협 브라우저 핑거 프린팅이 무엇을하는지, 그리고 그것을 막기 위해 어떤 대책이 적절한 지 논의합니다. 지문 인식에 대한 보호와 특정 종류의 디버깅 가능성 사이에는 상충 관계가 있으며, 현재 브라우저에서는 개인 정보 보호에 대한 가중치가 높습니다. 역설적으로, 지문 방지 개인 정보 보호 기술은 충분한 수의 사람들이 사용하지 않으면 스스로 패배 할 수 있습니다. 우리는 현재 일부 개인 정보 보호 조치가이 역설에 희생되고 있지만 다른 정책은 그렇지 않다는 것을 보여줍니다.


14
저는 개발자입니다. 빠른 솔루션이나 작은 코드 스 니펫을 찾기 위해 여기에 왔습니다. 이 문서는 그것을 구현하는 방법을 보여주지 않습니다. 내 사이트의 고유 사용자를 추적 할 수 있도록 구현 방법을 알고 싶습니다.
Oliver

10
@Oliver 당신이 맞습니다. 이것은 당신에게 접시에 답을주지 않습니다. 추가로 읽고 관련된 모든 문제와 간단한 코드 스 니펫이 완전히 작동하지 않는 이유를 이해해야합니다. 진취적인 개발자는 모든 어려운 작업을 수행하는 라이브러리를 작성하여 "빠른 솔루션"을 검색하는 사람들이 향후 혜택을 누릴 수 있도록합니다.
Jonathan

2
답변은 링크 전용입니다. PDF를 사용할 수없는 경우 PDF에 설명 된 기술에 대한 요약을 알 수 있습니다.
Damian Yerrick

2
지문 구현하는 오픈 소스 패키지와 쉽게 흉내 방법을 여기에 내 대답을 참조하십시오 stackoverflow.com/a/47536192/3650835
KayakinKoder

그래서 난 임의의 큰 숫자로 탄력적 인 "쿠키"를 만드는 것이 좋습니다 : D
Luis Mauricio

49

소개

브라우저 만 사용하여 컴퓨터를 고유하게 식별 할 수있는 방법이 있는지 또는 없는지 모르겠습니다. 주요 이유는 다음과 같습니다.

  • 사용자 컴퓨터에 데이터를 저장해야합니다. 이 데이터는 언제든지 사용자가 삭제할 수 있습니다. 각 머신마다 고유 한이 데이터를 다시 생성 할 수있는 방법이 없다면 고착 된 것입니다.
  • 확인. 스푸핑, 세션 하이재킹 등을 방지해야합니다.

쿠키를 사용하지 않고 컴퓨터를 추적하는 방법이 있더라도이를 자동으로 수행하는 소프트웨어와 소프트웨어를 항상 우회 할 수있는 방법이 있습니다. 컴퓨터를 기반으로 무언가를 추적 해야하는 경우 기본 응용 프로그램 (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/ 에서 동일한 세션 ID를 생성 할 수 있습니다 email.
  2. 를 사용하여 게스트 사용자를 계속 추적 할 수 있습니다 sessionID.
  3. 여러 사람이 같은 컴퓨터 (예 : 사이버 카페)를 사용하더라도 로그인하면 따로 추적 할 수 있습니다.

세션 기반 추적의 단점 :

  1. 세션은 컴퓨터 기반이 아니라 브라우저 기반입니다. 사용자가 2 개의 다른 브라우저를 사용하는 경우 2 개의 다른 세션이 발생합니다. 이것이 문제라면 여기서 읽기를 중단 할 수 있습니다.
  2. 사용자가 로그인하지 않은 경우 세션이 만료됩니다. 사용자가 로그인하지 않은 경우 사용자가 쿠키 및 브라우저 캐시를 삭제하면 무효화 된 게스트 세션을 사용합니다.

이행

이를 구현하는 방법에는 여러 가지가 있습니다. 나는 그것들을 모두 다룰 수 있다고 생각하지 않는다. 나는 이것을 좋아하는 답변으로 만들 수있는 내가 좋아하는 것을 나열 할 것이다 . 그것을 명심하십시오.

기초

나는 영원히 쿠키로 알려진 것을 사용하여 세션을 추적합니다. 사용자가 쿠키를 삭제하거나 브라우저를 업데이트하더라도 자동으로 다시 생성되는 데이터입니다. 그러나 쿠키와 브라우징 캐시를 모두 삭제해도 사용자는 생존 할 수 없습니다.

이를 구현하기 위해 브라우저 캐싱 메커니즘 ( RFC ), WebStorage API ( MDN ) 및 브라우저 쿠키 ( RFC , Google Analytics )를 사용합니다.

적법한

추적 ID를 활용하려면 개인 정보 취급 방침 및 사용 약관에 하위 제목 추적 아래에 추가해야합니다 . 우리는 모두 다음 키 사용 document.cookiewindow.localStorage:

  • _ga : Google 웹 로그 분석 데이터
  • __utma : Google 웹 로그 분석 추적 쿠키
  • sid : SessionID

추적을 사용하는 모든 페이지에 개인 정보 보호 정책 및 사용 약관에 대한 링크를 포함 시키십시오.

세션 데이터는 어디에 저장합니까?

웹 사이트 데이터베이스 나 사용자 컴퓨터에 세션 데이터를 저장할 수 있습니다. 일반적으로 타사 응용 프로그램 (Google Analytics / Clicky 등)을 사용하는 소규모 사이트 (10 만 개가 넘는 연속 연결)에서 작업하므로 클라이언트 컴퓨터에 데이터를 저장하는 것이 가장 좋습니다. 다음과 같은 장점이 있습니다.

  1. 데이터베이스 조회 / 오버 헤드 /로드 / 대기 시간 / 공간 등이 없습니다.
  2. 사용자는 나에게 성가신 이메일을 쓸 필요없이 원하는 때마다 데이터를 삭제할 수 있습니다.

그리고 단점 :

  1. 데이터는 암호화 / 암호 해독 및 서명 / 확인되어 클라이언트 (나쁘지 않은) 및 서버 (bah!)에 CPU 오버 헤드가 발생합니다.
  2. 사용자가 쿠키와 캐시를 삭제하면 데이터가 삭제됩니다. (이것이 내가 정말로 원하는 것입니다)
  3. 사용자가 오프라인 상태가되면 분석에 데이터를 사용할 수 없습니다. (현재 브라우징 사용자에 대한 분석 만)

UUIDS

  • BrowserID : 브라우저 사용자 에이전트 문자열에서 생성 된 고유 ID입니다.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : 사용자 IP 주소 및 HTTPS 세션 키에서 생성됩니다. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : 수정 된 fingerprint.js를 기반으로하는 JavaScript 기반 지문 .FingerPrint.get()
  • SessionID : 첫 번째 사용자가 사이트를 방문 할 때 생성되는 임의의 키입니다.BrowserID|ComputerID|randombytes(256)
  • GoogleID : __utma쿠키 에서 생성됩니다 .getCookie(__utma).uniqueid

기구

다른 날 나는 여자 친구와 함께 웬디 윌리엄스 쇼 를 보고 있었고, 주최자가 시청자에게 적어도 한 달에 한 번 브라우저 기록을 삭제하도록 조언했을 때 완전히 충격을 받았습니다. 브라우저 기록을 삭제하면 일반적으로 다음과 같은 효과가 있습니다.

  1. 방문한 웹 사이트의 기록을 삭제합니다.
  2. 쿠키 및 window.localStorage(aww man)을 삭제합니다 .

대부분의 최신 브라우저에서는이 옵션을 쉽게 사용할 수 있지만 친구는 두려워하지 않습니다. 해결책이 있습니다. 브라우저에는 스크립트 / 이미지 등을 저장하는 캐싱 메커니즘이 있습니다. 일반적으로 기록을 삭제하더라도이 브라우저 캐시는 여전히 남아 있습니다. 여기에 데이터를 저장하는 방법 만 있으면됩니다. 이를 수행하는 두 가지 방법이 있습니다. SVG 이미지를 사용하고 데이터를 태그 안에 저장하는 것이 좋습니다. 이런 식으로 플래시를 사용하여 JavaScript를 비활성화 한 경우에도 데이터를 추출 할 수 있습니다. 그러나 그것은 조금 복잡하기 때문에 JSONP ( Wikipedia ) 를 사용하는 다른 접근법을 보여줄 것입니다

example.com/assets/js/tracking.js (실제 tracking.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") || ""

browser.js를 브라우저에 고정시키는 방법은 무엇입니까?

Cache-Control , Last-ModifiedETag HTTP 헤더를 사용하여이를 달성 할 수 있습니다. SessionIDetag 헤더에 대해 as 값을 사용할 수 있습니다 .

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-SinceIf-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가 고객이 로그인 한 상태에서 쿠키를 훔쳤다고 가정합니다. 쿠키를 어떻게 보호합니까? 구조에 대한 암호화 및 브라우저 지문. 의 원래 정의 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; 

이제 Haxor의 공격이 작동하려면 다음을 수행해야합니다.

  1. 동일 ComputerID합니다. 즉, 피해자 (Tricky)와 동일한 ISP 제공 업체가 있어야합니다. 이를 통해 피해자는 자국에서 법적 조치를 취할 수 있습니다. 또한 Haxor는 피해자 (Hard)로부터 HTTPS 세션 키를 얻어야합니다.
  2. 동일 BrowserID합니다. 누구나 User-Agent 문자열을 스푸핑 할 수 있습니다 (성가신).
  3. 자신 만의 가짜 SessionID(Very Hard) 를 만들 수 있습니다 . 타임 스탬프를 사용하여 암호화 / 서명 키를 생성하므로 기본적으로 각 세션에 대해 새 키를 생성하는 것처럼 볼륨 공격이 작동하지 않습니다. 또한 임의의 바이트를 암호화하므로 간단한 사전 공격도 문제가되지 않습니다.

우리는 (아약스 또는 숨겨진 필드를 통해) 전달 GoogleID하고 FingerprintID그와 일치 시킴으로써 유효성을 향상시킬 수 있습니다 .

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

1
그건 그렇고 아름다운 대답입니다. 너무 많은 정보. 난 당신이 더 많은 투표를하지 않은 것에 놀랐습니다. 나는 솔직히 svgs와 jsonp 기술이 존재한다고 믿을 수는 없지만 반드시 있어야합니다. 쿠키 / 로컬 스토리지 / 세션 스토리지가 비활성화 된 경우 이러한 기술로 대체되는 라이브러리가 없습니까?
faceyspacey.com

또한 캐시 된 tracking.js 파일 (또는 여러 파일)을 사용하여 본질적으로 localStorage / cookies로 사용하기 위해, 즉 많은 데이터를 기억하기 위해 고급 버전이 있는지 궁금합니다. 아이디어는 라이브러리가 세션 중에 생성 된 모든 diff의 storageFacade.setItem및 storageFacade.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

매니페스트가 가끔씩 만 생성 된 경우 본질적으로 생성 된 매니페스트 수를 제한합니다. 그런 다음 나중에 자바 스크립트에서 가능한 모든 매니페스트를 요청한 다음 최신 매니페스트를 사용하여 diff 스냅 샷에서 상태를 다시 작성할 수 있습니다. 우리가 단지 diff를 가지고 있다면, 수백 또는 수천 개가있을 수 있으며 하나가 실패 할 때까지 모두 가져 오려고 시도하는 성능 문제 일 수 있습니다. 즉, diff 또는 매니페스트를 가져옵니다 (manifest-1.js, manifest-2.js 등). 실패하지 않을 때까지 (존재하지 않기 때문에). 즉, 모든 매니페스트 (또는 diff)가 있음을 의미합니다
faceyspacey.com

@ faceyspacey.com 라이브러리가 없습니다. 사용자 정의 솔루션을 코딩하고 지속적으로 업데이트해야합니다. 생각 해봐 이것에 대한 lib를 개발하자마자 모든 add blockers / browsers / etc는 즉시 그것을 반박 할 것입니다. 이것이 작동하는 유일한 이유는 단순히 제거 / 비활성화하지 않는 매우 중요한 핵심 브라우저 기능 인 CACHING에 의존하기 때문입니다. 로그인 및 비밀번호가 계속 손실됩니다. 그리고 더 이상 많은 질문을하지 않기 때문에 많은 답변을 할 필요가 없으므로 명성을 가진 바운티를 남길 수 있습니다. 방금 이것을보고 실제 답변이 없다는 것을 깨달았습니다.
Walter

30

소유자의 협조없이 웹 사이트에 액세스하는 컴퓨터를 식별 할 수 없습니다. 그러나 그들이 당신을 허용한다면, 당신은 귀하의 사이트를 다시 방문 할 때 기계를 식별하기 위해 쿠키를 저장할 수 있습니다. 열쇠는 방문자가 통제하고 있다는 것입니다. 쿠키를 제거하고 원하는 시간에 새 방문자로 표시 할 수 있습니다.


7
3 개의 다른 브라우저로 사이트를 방문하면 쿠키가 앱간에 공유되지 않으므로 3 개의 다른 쿠키를 갖게됩니다. 또한 고정 IP 주소 대신 DHCP를 사용하는 경우 컴퓨터의 IP 주소가 오랫동안 동일하지 않을 수 있습니다.
JohnnySoftware

2
예, 아니오 브라우저 지문은 가능성이 높은 브라우저 프로파일을 식별하지만이 질문에서 절대적으로 일대일로 식별되는 것은 아닙니다. 정통한 사용자가 원하는 경우 의도적으로 우회하는 것도 상당히 간단합니다 (아마도 쉽지는 않습니다 ).
erickson

30

가능성이 사용하는 플래시 쿠키를 :

  • 유비쿼터스 가용성 (방문객의 95 %가 플래시 일 것임)
  • 쿠키 당 더 많은 데이터를 저장할 수 있습니다 (최대 100KB)
  • 여러 브라우저에서 공유되므로 시스템을 고유하게 식별 할 가능성이 높습니다
  • 브라우저 쿠키를 지우면 플래시 쿠키는 제거되지 않습니다.

읽고 쓰는 작은 (숨겨진) 플래시 무비를 제작해야합니다.

어떤 경로를 선택하든 사용자가 추적하도록 선택해야합니다. 그렇지 않으면 개인 정보가 침해되고 나쁜 사람이됩니다.


5
많은 사용자가 Flashblock을 사용합니다. 클릭하면 사용자가 플래시를 볼 수 있습니다.
Horcrux7

3
쿠키를 제거하는 방법이 있지만 평균 사용자를 초과합니다. Firefox 사용자의 경우 Objection 애드온을 제거하는 가장 쉬운 방법이지만 Adobe 웹 사이트에는 LSO (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object )를보고 제거 할 수있는 페이지가 있습니다
Sam Hasler

나는 이것이 최고의 솔루션 중 하나라고 생각합니다. YouTube, Google 등은 LSO를 사용하여 악용을 방지합니다.
Uku Loskit

4
최신 버전의 Firefox 및 Chrome에서 플래시 쿠키는 HTTP 쿠키처럼 쉽게 삭제됩니다. Wikipedia :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
지난 9 년간 상황이 바뀌 었습니다. 오늘날 사용자의 95 %가 데스크탑을 사용하지 않으며 모바일은 실제로 Adobe Flash Player를 채택하지 않았습니다.
Damian Yerrick

21

evercookie에서 고유 ID를 설정하려고 할 수 있습니다 (브라우저에서 작동하며 FAQ를 참조하십시오) : http://samy.pl/evercookie/

이 문제를 해결하기 위해 큰 많은 회사에서 사용하는 ThreatMetrix라는 회사가있다 : http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ 그들은 매우 비싸고 중 일부입니다 다른 제품은별로 좋지 않지만 장치 ID는 잘 작동합니다.

마지막으로, panopticlick 아이디어의 오픈 소스 JQuery와 구현이있다 : https://github.com/carlo/jquery-browser-fingerprint 그것은 꽤 절반 지금 구운 보이지만 따라 확장 할 수 있습니다.

그것이 도움이되기를 바랍니다!


+ 1-Brian-훌륭한 정보! 이 모든 것이 매우 유용한 것으로 입증되었습니다. 감사합니다. 더 이상 배우지 않았다면 더 많은 정보를 추가하십시오.
Ben O

1
에버 쿠키에 관해서. 오페라와 함께 시도했다. 쿠키를 설정 한 다음 Opera에서 모든 기록을 삭제 한 다음 Opera를 닫고 다시 클릭하여 열거 Click to rediscover cookies나 정의되지 않은 것을 확인하십시오. 그래서 이것은 작동하지 않습니다
Andris

iOS Safari 비공개 모드 및 데스크톱 Chrome 시크릿으로 샘플 페이지를 시험해 본 결과 브라우저를 다시 시작한 후 쿠키를 검색 할 수 없습니다.
Morio

20

이 과학적인 문서에서 설명하는 인기있는 방법이라고 캔버스 지문,이 웹 결코 잊어 : 야생에서 영구 추적 메커니즘 . 그것을 찾기 시작하면 얼마나 자주 사용되는지 놀랄 것입니다. 이 방법은 각 브라우저 / 하드웨어 조합에 대해 일관된 고유 한 지문을 만듭니다.

이 기사는 또한 에버 쿠키, http 및 플래시 쿠키 재 생성 및 쿠키 동기화와 같은 다른 영구 추적 방법을 검토합니다.

캔버스 핑거 프린팅에 대한 추가 정보 :


1
두 장치가 동일하다면 (같은 배치 컴퓨터, 동일한 OS, 동일한 브라우저) 지문이 동일합니까?
xiaoyu2er

실제 질문은 이것을 사용하기 위해 코드에 넣을 수있는 자바 스크립트 라이브러리입니다. 많은 이론을 읽음으로써 60 분 이내에 해결해야하는 문제는 해결되지 않습니다.
Thanasis Ioannidis

11

HTTP 연결을 통해 얻을 수있는 소량의 정보 만 있습니다.

  1. IP-그러나 다른 사람들이 말했듯이 대부분의 인터넷 사용자는 ISP의 동적 할당 정책으로 인해 많은 인터넷 사용자에게 수정되지 않았습니다.

  2. Useragent String-거의 모든 브라우저가 요청마다 어떤 종류의 브라우저를 전송합니다. 그러나 이것은 오늘날 많은 브라우저에서 사용자가 설정할 수 있습니다.

  3. 요청 필드 수집-지원되는 인코딩 등 각 요청과 함께 전송되는 다른 필드가 있습니다. 이러한 필드는 집계에서 사용되는 경우 사용자의 컴퓨터를 식별하는 데 도움이 될 수 있지만 브라우저에 따라 다르며 변경 될 수 있습니다.

  4. 쿠키-쿠키를 설정하는 것은 컴퓨터, 특히 컴퓨터의 브라우저를 식별하는 또 다른 방법이지만 다른 사람들이 말했듯이 사용자가 삭제하거나 끌 수 있으며 브라우저에서만 적용 할 수 있습니다. 기계.

따라서 올바른 응답은 HTTP over IP 프로토콜만으로는 원하는 것을 얻을 수 없다는 것입니다. 그러나 쿠키와 IP의 조합 및 HTTP 요청의 필드를 사용하면 어떤 기계인지 추측하고 정렬 할 수 있습니다. 사용자는 하나의 브라우저를 사용하는 경향이 있으며 종종 하나의 컴퓨터에서 사용하기 때문에 상당히 신뢰할 수 있지만 청중에 따라 다를 수 있습니다. 또한 이것은 IP를 지리적 위치에 놓고 그 데이터를 사용하려는 시도와도 결합 될 수 있습니다. 그러나 어쨌든 항상 올바른 해결책은 없습니다.


10

쿠키 접근 방식과 쿠키가 아닌 접근 방식에는 모두 결함이 있습니다. 그러나 쿠키 접근 방식의 단점을 용서할 수 있다면 여기 아이디어가 있습니다.

사이트에서 이미 Google 웹 로그 분석을 사용중인 경우 고유 사용자를 추적하기 위해 코드를 작성할 필요가 없습니다. Google 웹 로그 분석은 Google 문서에__utma 설명 된대로 쿠키 값 을 통해이를 수행합니다 . 이 값을 재사용하면 추가 쿠키 페이로드가 생성되지 않으므로 페이지 요청에 대한 효율성 이점이 있습니다.

또한 해당 값에 액세스 하거나이 스크립트 getUniqueId() 기능을 사용 하기에 충분한 코드를 쉽게 작성할 수 있습니다.


getUniqueId()같은 컴퓨터의 다른 브라우저에서 동일한 ID를 사용 합니까?
Ankur Akvaliya

8

이전 솔루션과 마찬가지로 쿠키는 좋은 방법이므로 브라우저 를 식별한다는 점에 유의하십시오 . Firefox에서 웹 사이트를 방문한 다음 Internet Explorer에서 웹 사이트를 방문하면 두 시도에 대해 쿠키가 별도로 저장됩니다. 일부 사용자는 쿠키를 비활성화하지만 더 많은 사람들이 JavaScript를 비활성화합니다.

고려해야 할 다른 방법은 IP 및 호스트 이름 식별입니다 (전화 접속 / 비 정적 IP 사용자에 따라 다를 수 있으며 AOL은 블랭킷 IP를 사용함). 그러나 이것은 네트워크 만 식별하므로 쿠키뿐만 아니라 작동하지 않을 수도 있습니다.


네트워크에 대한 액세스 지점을 식별하는 IP 주소가있는 좋은 점-NAT를 사용 하면 단일 IP 주소 뒤에 모든 국가가 숨겨져있어 더 현명 할 수는 없습니다. IPv4 주소 부족으로 인해 아웃 바운드 인터넷 트래픽에 대해 단일 IP 주소를 공유하는 대기업이나 학교 / 대학이 여전히 보입니다.
Piskvor가

6

쿠키를 제외하고, 조사 할 수있는 포괄적 인 식별 속성 집합은 HTTP 요청 헤더에 포함되어 있습니다. 따라서 이들 중 일부를 사용하여 사용자 에이전트 (예 : 브라우저)에 대한 의사 고유 식별자를 작성할 수 있습니다. 또한이 정보의 대부분은 기본적으로 웹 서버 소프트웨어의 "액세스 로그"에 이미 기록되어있을 수 있으며, 그렇지 않은 경우 쉽게 구성 할 수 있습니다. 그런 다음이 로그의 내용을 스캔하여 지문을 생성하는 기능을 개발할 수 있습니다.예를 들어, IP 주소 및 사용자 에이전트 문자열 등으로 구성된 각 요청의 수. 많은 다른 사람들이 이미 언급했듯이 HTTP 프로토콜은이 100 %를 완벽하게 만들지 않습니다.


6

온라인 뱅킹 웹 사이트를 방문한 적이없는 컴퓨터를 사용하면 추가 인증을 요청받습니다. 그런 다음 온라인 뱅킹 사이트로 다시 돌아 가면 추가 인증을 요청받지 않습니다 ... IE의 모든 쿠키를 삭제하고 온라인 뱅킹 사이트에 다시 로그온하여 인증 질문을 다시 요청할 것으로 기대합니다. 놀랍게도 나는 묻지 않았다. 이것은 은행이 쿠키를 포함하지 않는 일종의 PC 태깅을하고 있다고 생각하지 않습니까?

이것은 은행에서 사용하는 매우 일반적인 인증 유형입니다.

example-isp.com을 통해 은행 웹 사이트에 액세스한다고 가정 해보십시오. 처음 방문하면 추가 인증뿐만 아니라 비밀번호를 묻는 메시지가 표시됩니다. 당신이 통과하면, 은행은 사용자 "thatisvaliant"가 example-isp.com을 통해 사이트에 액세스 할 수 있도록 인증되었음을 알게됩니다.

앞으로는 example-isp.com을 통해 사이트에 액세스 할 때 추가 암호 (암호 이외)를 요구하지 않습니다. another-isp.com을 통해 은행에 액세스하려고하면 은행이 동일한 루틴을 다시 수행합니다.

요약하면, 은행의 식별 정보는 IP 주소를 기반으로 한 ISP 및 / 또는 넷 블록입니다. 분명히 ISP의 모든 사용자가 당신이 아니기 때문에 은행에서 여전히 암호를 요구합니다.

다른 국가에서 신용 카드를 사용할 때 문제가 없는지 확인하기 위해 신용 카드 회사 전화를 한 적이 있습니까? 같은 개념입니다.


4

프로토콜이 허용하지 않기 때문에 실제로 원하는 것을 수행 할 수 없습니다. 고정 IP가 보편적으로 사용 되었다면 그렇게 할 수 있습니다. 그것들은 아니므로 당신은 할 수 없습니다.

정말로 사람 을 식별하려면 로그인하도록하십시오.

웹 사이트의 다른 페이지로 이동할 수 있으므로 페이지를 이동할 때이를 추적 할 수있는 방법이 필요합니다.

로그인 한 상태에서 쿠키 / 링크 매개 변수 / 비콘 / 무엇을 통해 사이트 내에서 세션을 추적하는 한 해당 시간 동안 동일한 컴퓨터를 사용하고 있는지 확인할 수 있습니다.

궁극적으로, 사용자가 자신의 로컬 네트워크를 사용하지 않고 고정 IP 주소가없는 경우 사용중인 컴퓨터를 알려주는 것은 올바르지 않습니다.

당신이하고 싶은 일이 사용자의 협력으로 이루어지고 쿠키 당 하나의 사용자 만 있고 단일 웹 브라우저를 사용하는 경우 쿠키를 사용하십시오.


3

쿠키는 순 방문자수를 결정하는 데 유용하지 않습니다. 사용자는 쿠키를 지우고 사이트를 새로 고칠 수 있으며 새 사용자로 다시 분류됩니다.

이 작업을 수행하는 가장 좋은 방법은 서버 측 솔루션을 구현하는 것입니다 (데이터를 저장할 위치가 필요하기 때문에). 이러한 데이터에 대한 요구의 복잡성에 따라 순 방문으로 분류 된 항목을 결정해야합니다. 현명한 방법은 다음 날 IP 주소를 반환하고 고유 한 방문을 허용하는 것입니다. 하루에 한 IP 주소에서 여러 번 방문한 것이 고유 한 것으로 계산되지 않아야합니다.

예를 들어, PHP를 사용하면 방문자의 IP 주소를 가져 와서 텍스트 파일 (또는 sql 데이터베이스)에 저장하는 것이 간단합니다.

서버 측 솔루션은 사용자가 사이트를 처음로드 할 때 사용자를 추적하기 때문에 모든 컴퓨터에서 작동합니다. 클라이언트 측 스크립팅을위한 자바 스크립트를 사용하지 마십시오. 사용자는 어떤 경우에도이를 비활성화했을 수 있습니다.

희망이 도움이됩니다.


4
아내와 저는 집에서 NAT 방화벽 뒤에있는 네 대의 다른 컴퓨터를 탐색합니다. 우리는 동일한 IP를 가진 것으로 표시되므로 귀하의 계획에 따라 동일한 사용자로 표시됩니다.
Adam Ness

mysql에서 추가 변수를 작성하려면 어떻게합니까 (여기에서 panopticlick.eff.org/browser-uniqueness.pdf 참조 )? 따라서 IP 주소는 동일하지만 다른 특성은 다를 수 있습니다.
Andris

3

솔루션이 모든 컴퓨터와 모든 브라우저에서 작동하기를 원하기 때문에 (이유 내에서) javascript를 사용하여 솔루션을 만들려고합니다.

이것이 자바 스크립트를 사용 하지 않는 좋은 이유가 아닙니까?

다른 사람들이 말했듯이 쿠키는 아마도 최선의 선택 일 것입니다.


3

지문 을 사용할 수 있습니다

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

평결은 내 웹 사이트를 방문하는 컴퓨터를 프로그래밍 방식으로 고유하게 식별 할 수 없다는 것입니다.

다음과 같은 질문이 있습니다. 온라인 뱅킹 웹 사이트를 방문한 적이없는 컴퓨터를 사용하면 추가 인증을 요청받습니다. 그런 다음 온라인 뱅킹 사이트로 다시 돌아 가면 추가 인증을 요청받지 않습니다. 내 질문에 대한 답변을 읽고 쿠키와 관련이 있어야한다고 결정했습니다. 따라서 IE의 모든 쿠키를 삭제하고 인증 질문을 다시 요청할 것으로 예상되는 온라인 뱅킹 사이트에 다시 로그인했습니다. 놀랍게도 나는 묻지 않았다. 이것은 은행이 쿠키를 포함하지 않는 일종의 PC 태깅을하고 있다고 생각하지 않습니까?

또한 오늘 많은 인터넷 검색을 한 후 웹 사이트를 방문하는 컴퓨터를 고유하게 식별하는 솔루션을 판매한다고 주장하는 다음 회사를 발견했습니다. http://www.the41.com/products.asp .

이 상충되는 정보를 더 명확하게 밝힐 수 있다면 모든 좋은 정보에 감사드립니다.


이를 기반으로 : the41.com/download/… 해결책은 사용자가 컴퓨터를 기반으로 고유 식별자를 생성하고 일부 로그인 자격 증명에 연결하는 소프트웨어를 다운로드하는 것 같습니다.
mmacaulay

이미 언급했듯이 플래시 쿠키를 사용하여 은행을 배제하지 않았습니다. 플래시 쿠키 및 문제에 대한 기타 토론을 지우는 방법 : tips.vlaurie.com/2007/10/24/…
micahwittman

내 추측 : 은행은 아마도 (1) ​​사용자 이름을 알고 (2) 암호를 알고 (3a) 쿠키를 가지고 있거나 (3b) 이전에 얻은 IP 주소에서 온 경우 당신을 신뢰한다고 생각합니다 당신과 관련이 있습니다.
잭 피터슨

2

쿠키와 플래시 쿠키의 조합을 사용 하여이 작업을 수행합니다. GUID를 만들어 쿠키에 저장하십시오. 쿠키가 존재하지 않으면 플래시 쿠키에서 쿠키를 읽으십시오. 여전히 찾을 수없는 경우 플래시 쿠키에 작성하십시오. 이 방법으로 브라우저간에 동일한 GUID를 공유 할 수 있습니다.


1

나는 쿠키가 당신이 찾고있는 것일 것이라고 생각합니다. 대부분의 웹 사이트에서 방문자를 고유하게 식별하는 방법입니다.


0

사용자가 통제하기를 원하지 않는다고 가정하면 할 수 없습니다. 웹은 그렇게 작동하지 않습니다. 희망하는 것은 휴리스틱입니다.

방문자가 일부 소프트웨어를 설치하고 TCPA를 사용하도록하는 옵션 인 경우 무언가를 끌어낼 수 있습니다.


0

내 게시물은 해결책이 아니지만이 기능이 구현 된 예를 제공 할 수 있습니다.

www.supertorrents.org컴퓨터에서 처음으로 가입 페이지를 방문하면 괜찮습니다. 그러나 페이지를 새로 고치거나 페이지를 다시 열면 이전에 페이지를 방문한 것으로 나타납니다. 진정한 아름다움은 Windows 또는 다른 OS를 다시 설치하더라도 식별됩니다.

CPU ID를 저장하는 곳을 읽었습니다. 어떻게해야할지 모르겠지만 심각하게 의심하고 MAC 주소를 사용하여 처리 할 수 ​​있습니다.

어떻게해야하는지 확실히 알려 드리겠습니다 .


www.supertorrents.org는 죽었습니다
툴킷

0

트릭:

  1. 2 개의 등록 페이지를 작성하십시오.

    첫 등록 페이지 : 이메일 또는 보안 검사없이 (사용자 이름 및 비밀번호 만 사용)

    두 번째 등록 페이지 : 보안 수준이 높음 (이메일 확인 요청 및 보안 이미지 등)

  2. 고객 만족과 쉬운 등록을 위해 기본 등록 페이지는 (첫 번째 등록 페이지) 여야 하지만 (첫 번째 등록 페이지) 에는 숨겨진 제한이 있습니다. IP 제한입니다. IP가 차단 페이지를 표시하는 대신 두 번째로 등록하려고하면 (예 : 1 시간 미만) (두 번째 등록 페이지)를 자동으로 표시 할 수 있습니다 .

  3. (먼저 등록 페이지) (: 블록 단지 1 시간 또는 24 시간 동안 하나의 IP에서 2 개 시도 예를 들어) 1 (예를 들어) 시간 후에는 자동으로 IP 액세스를 열 수 있습니다을 설정할 수 있습니다

참고 : (첫 번째 등록 페이지)(두 번째 등록 페이지) 는 분리 된 페이지에 있어서는 안됩니다. 당신은 단지 1 페이지를 만든다. (예 : register.php) 첫 번째 PHP 스타일과 두 번째 PHP 스타일 사이를 전환하는 것이 현명합니다.


Mahdi Jazini. 모두 맞습니다.하지만 제 질문은 클라이언트 컴퓨터의 IP 주소를 어떻게 식별하는지입니다. 감사합니다.
JENKINS J
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.