Làm cách nào để xác định duy nhất các máy tính truy cập trang web của tôi?


184

Tôi cần tìm ra một cách xác định duy nhất mỗi máy tính truy cập trang web tôi đang tạo. Có ai có lời khuyên về làm thế nào để đạt được điều này?

Bởi vì tôi muốn giải pháp hoạt động trên tất cả các máy và tất cả các trình duyệt (trong lý do), tôi đang cố gắng tạo một giải pháp bằng cách sử dụng javascript.

Cookies sẽ không làm.

Tôi cần khả năng cơ bản tạo ra một hướng dẫn duy nhất cho máy tính và có thể lặp lại, giả sử không có thay đổi phần cứng nào xảy ra với máy tính. Các hướng tôi đang nghĩ đến là lấy MAC của card mạng và các thông tin khác có tính chất này sẽ id máy truy cập trang web.


4
Bạn không thể lấy mac của card mạng của họ - IP không chứa thông tin đó, thứ tốt nhất bạn có thể nhận là địa chỉ IP của cổng ISP của họ. Đối với một số ISP có thể giống nhau cho tất cả người dùng trong một thành phố nhất định.
Martin Beckett

1
Thực tế là bạn không muốn người dùng có thể giả mạo nó. Câu trả lời tất nhiên là không thể thực hiện được nếu không có một số thành phần được mã hóa của bạn được cài đặt trên máy người dùng.
AnthonyWJones

Địa chỉ MAC rất dễ bị giả mạo. Kết nối không dây nhỏ bé của tôi sẽ đi qua MAC của bạn, thay thế nó hoặc sử dụng kết nối bạn chỉ định.
Kent Brewster

Điều này không thể thực hiện được - cookie là đặt cược tốt nhất của bạn
Draemon

Xin vui lòng đọc câu trả lời của tôi trong trang này. tôi có một ý tưởng rất hay cho vấn đề này :)
Mahdi Jazini 6/11/2016

Câu trả lời:


58

Những người này đã phát triển một phương pháp lấy dấu vân tay để nhận ra người dùng có độ chính xác cao:

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

Chúng tôi điều tra mức độ mà các trình duyệt web hiện đại phải tuân theo dấu vân tay của thiết bị, thông qua phiên bản và thông tin cấu hình mà chúng sẽ truyền tới các trang web theo yêu cầu. Chúng tôi đã triển khai một thuật toán lấy dấu vân tay có thể và đã thu thập những dấu vân tay này từ một mẫu lớn các trình duyệt đã truy cập vào phía thử nghiệm của chúng tôi, panopticlick.eff.org. Chúng tôi quan sát rằng việc phân phối dấu vân tay của chúng tôi chứa ít nhất 18,1 bit entropy, nghĩa là nếu chúng tôi chọn một trình duyệt một cách ngẫu nhiên, tốt nhất là chúng tôi hy vọng rằng chỉ một trong số 286.777 trình duyệt khác sẽ chia sẻ dấu vân tay của nó. Trong số các trình duyệt hỗ trợ Flash hoặc Java, tình hình còn tệ hơn, với trình duyệt trung bình mang ít nhất 18,8 bit thông tin nhận dạng. 94,2% trình duyệt có Flash hoặc Java là duy nhất trong mẫu của chúng tôi.

Bằng cách quan sát khách truy cập quay lại, chúng tôi ước tính dấu vân tay của trình duyệt có thể thay đổi nhanh như thế nào theo thời gian. Trong mẫu của chúng tôi, dấu vân tay đã thay đổi khá nhanh, nhưng ngay cả một heuristic đơn giản thường có thể đoán được khi nào dấu vân tay là phiên bản nâng cấp của một bản sao của một trình duyệt được quan sát trước đó, với 99,1% đoán đúng và tỷ lệ dương tính giả chỉ 0,86% .

Chúng tôi thảo luận về những gì mối đe dọa quyền riêng tư trình duyệt dấu vân tay đặt ra trong thực tế, và biện pháp đối phó nào có thể phù hợp để ngăn chặn nó. Có một sự đánh đổi giữa việc bảo vệ chống lại dấu vân tay và một số loại gỡ lỗi nhất định, trong các trình duyệt hiện tại có trọng số lớn đối với quyền riêng tư. Nghịch lý thay, các công nghệ bảo mật chống dấu vân tay có thể tự đánh bại nếu chúng không được sử dụng bởi một số lượng người; chúng tôi cho thấy rằng một số biện pháp bảo mật hiện đang trở thành nạn nhân của nghịch lý này, nhưng những biện pháp khác không ...


14
Tôi là một nhà phát triển, tôi đến đây để tìm kiếm một giải pháp nhanh chóng hoặc một đoạn mã nhỏ. Tài liệu này không chỉ ra cách thực hiện nó. Tôi muốn biết làm thế nào để tôi thực hiện điều này để tôi có thể theo dõi người dùng duy nhất cho trang web của mình.
Oliver

10
@Oliver Bạn đúng rồi. Điều này không cung cấp cho bạn câu trả lời trên một tấm. Nó đòi hỏi phải đọc thêm, hiểu tất cả các vấn đề liên quan và tại sao một đoạn mã đơn giản dường như không bao giờ hoàn toàn hoạt động. Một nhà phát triển táo bạo có thể viết một thư viện thực hiện tất cả công việc khó khăn và cho phép mọi người tìm kiếm "giải pháp nhanh" để mang lại lợi ích trong tương lai.
Jonathan

2
Câu trả lời cũng chỉ liên kết. Một bản tóm tắt các kỹ thuật được mô tả trong PDF sẽ được đánh giá cao trong trường hợp PDF không khả dụng.
Damian Yerrick

2
Xem câu trả lời của tôi ở đây cho một gói phần mềm mã nguồn mở và dễ dàng-ish thi hành OS fingerprinting stackoverflow.com/a/47536192/3650835
KayakinKoder

Vì vậy, tốt hơn tôi nên tạo một "cookie" kiên cường với một số lượng lớn ngẫu nhiên: D
Luis Mauricio

49

Giới thiệu

Tôi không biết nếu có hoặc sẽ có một cách để nhận dạng duy nhất các máy chỉ sử dụng trình duyệt. Những lý do chính là:

  • Bạn sẽ cần lưu dữ liệu trên máy tính của người dùng. Dữ liệu này có thể bị xóa bởi người dùng bất cứ lúc nào. Trừ khi bạn có cách để tạo lại dữ liệu này là duy nhất cho mỗi máy và sau đó máy của bạn bị kẹt.
  • Thẩm định. Bạn cần bảo vệ chống giả mạo, chiếm quyền điều khiển phiên, v.v.

Ngay cả khi có những cách để theo dõi máy tính mà không sử dụng cookie, sẽ luôn có cách để vượt qua nó và phần mềm sẽ tự động làm việc này. Nếu bạn thực sự cần theo dõi một cái gì đó dựa trên máy tính, bạn sẽ phải viết một ứng dụng gốc (Apple Store / Android Store / Chương trình Windows / vv).

Tôi có thể không thể đưa ra câu trả lời cho câu hỏi bạn đã hỏi nhưng tôi có thể chỉ cho bạn cách triển khai theo dõi phiên. Với theo dõi phiên, bạn cố gắng theo dõi phiên duyệt thay vì máy tính truy cập trang web của bạn. Bằng cách theo dõi phiên, lược đồ cơ sở dữ liệu của bạn sẽ trông như thế này:

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
  }, ...]

Ưu điểm của theo dõi dựa trên phiên:

  1. Đối với người dùng đã đăng nhập, bạn luôn có thể tạo cùng một id phiên từ người dùng username/ password/ email.
  2. Bạn vẫn có thể theo dõi người dùng khách bằng cách sử dụng sessionID.
  3. Ngay cả khi một số người sử dụng cùng một máy tính (ví dụ như cybercafe), bạn có thể theo dõi họ riêng nếu họ đăng nhập.

Nhược điểm của theo dõi dựa trên phiên:

  1. Phiên là dựa trên trình duyệt và không dựa trên máy tính. Nếu người dùng sử dụng 2 trình duyệt khác nhau, nó sẽ dẫn đến 2 phiên khác nhau. Nếu đây là một vấn đề bạn có thể dừng đọc ở đây.
  2. Phiên hết hạn nếu người dùng chưa đăng nhập. Nếu người dùng chưa đăng nhập, họ sẽ sử dụng phiên khách sẽ bị vô hiệu nếu người dùng xóa cookie và bộ đệm của trình duyệt.

Thực hiện

Có nhiều cách để thực hiện điều này. Tôi không nghĩ rằng tôi có thể bao quát tất cả chúng tôi sẽ chỉ liệt kê yêu thích của tôi mà sẽ làm cho câu trả lời này có ý kiến . Hãy ghi nhớ điều đó.

Khái niệm cơ bản

Tôi sẽ theo dõi phiên bằng cách sử dụng cái được gọi là cookie mãi mãi. Đây là dữ liệu sẽ tự động tạo lại ngay cả khi người dùng xóa cookie hoặc cập nhật trình duyệt của mình. Tuy nhiên, nó sẽ không tồn tại khi người dùng xóa cả cookie và bộ nhớ cache duyệt web của họ.

Để thực hiện điều này, tôi sẽ sử dụng cơ chế lưu trữ của trình duyệt ( RFC ), API WebStorage ( MDN ) và cookie trình duyệt ( RFC , Google Analytics ).

Hợp pháp

Để sử dụng id theo dõi, bạn cần thêm chúng vào cả chính sách bảo mật và điều khoản sử dụng của bạn tốt nhất là theo dõi Tiêu đề phụ . Chúng tôi sẽ sử dụng các phím sau trên cả hai document.cookiewindow.localStorage:

  • _ga : dữ liệu Google Analytics
  • __utma : cookie theo dõi Google Analytics
  • sid : sessionID

Đảm bảo bạn bao gồm các liên kết đến chính sách quyền riêng tư và điều khoản sử dụng của bạn trên tất cả các trang sử dụng theo dõi.

Tôi lưu trữ dữ liệu phiên của mình ở đâu?

Bạn có thể lưu trữ dữ liệu phiên của bạn trong cơ sở dữ liệu trang web của bạn hoặc trên máy tính của người dùng. Vì tôi thường làm việc trên các trang web nhỏ hơn (cho phép hơn 10 nghìn kết nối liên tục) sử dụng các ứng dụng của bên thứ 3 (Google Analytics / Clicky / etc) nên tốt nhất cho tôi để lưu trữ dữ liệu trên máy khách. Điều này có những ưu điểm sau:

  1. Không có tra cứu cơ sở dữ liệu / phí / tải / độ trễ / không gian / vv
  2. Người dùng có thể xóa dữ liệu của họ bất cứ khi nào họ muốn mà không cần phải viết cho tôi những email khó chịu.

và nhược điểm:

  1. Dữ liệu phải được mã hóa / giải mã và ký / xác minh để tạo ra chi phí cpu trên máy khách (không quá tệ) và máy chủ (bah!).
  2. Dữ liệu sẽ bị xóa khi người dùng xóa cookie và bộ nhớ cache của họ. (đây là những gì tôi muốn thực sự)
  3. Dữ liệu không có sẵn để phân tích khi người dùng ngoại tuyến. (phân tích chỉ dành cho người dùng đang duyệt)

UUIDS

  • BrowserID : Id duy nhất được tạo từ chuỗi tác nhân người dùng trình duyệt.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : Được tạo từ địa chỉ IP của người dùng và khóa phiên HTTPS. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : JavaScript fingerprinting dựa trên cơ sở sửa đổi fingerprint.js .FingerPrint.get()
  • SessionID : Khóa ngẫu nhiên được tạo khi người dùng truy cập trang web đầu tiên.BrowserID|ComputerID|randombytes(256)
  • GoogleID : Được tạo từ __utmacookie.getCookie(__utma).uniqueid

Cơ chế

Hôm nọ tôi đang xem chương trình wiamy williams với bạn gái của tôi và hoàn toàn kinh hoàng khi người dẫn chương trình khuyên người xem của cô ấy nên xóa lịch sử trình duyệt của họ ít nhất một lần mỗi tháng. Xóa lịch sử trình duyệt thường có các tác dụng sau:

  1. Xóa lịch sử của các trang web truy cập.
  2. Xóa cookie và window.localStorage(aww man).

Hầu hết các trình duyệt hiện đại làm cho tùy chọn này có sẵn nhưng không sợ bạn bè. Để có một giải pháp. Trình duyệt có một cơ chế lưu trữ để lưu trữ tập lệnh / hình ảnh và những thứ khác. Thông thường ngay cả khi chúng tôi xóa lịch sử của mình, bộ đệm của trình duyệt này vẫn còn. Tất cả chúng ta cần là một cách để lưu trữ dữ liệu của chúng tôi ở đây. Có 2 phương pháp để làm điều này. Cách tốt hơn là sử dụng hình ảnh SVG và lưu trữ dữ liệu của chúng tôi bên trong các thẻ của nó. Bằng cách này, dữ liệu vẫn có thể được trích xuất ngay cả khi JavaScript bị tắt bằng flash. Tuy nhiên vì điều đó hơi phức tạp nên tôi sẽ trình bày cách tiếp cận khác sử dụng JSONP ( Wikipedia )

example.com/assets/js/tracking.js (thực sự theo dõi.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);
}

Bây giờ chúng tôi có thể nhận được khóa phiên của mình bất cứ lúc nào:

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

Làm cách nào để tôi theo dõi.j.j trong trình duyệt?

Chúng tôi có thể đạt được điều này bằng cách sử dụng các tiêu đề HTTP Cache-Control , Last-ModifiedETag . Chúng ta có thể sử dụng SessionIDgiá trị as cho tiêu đề etag:

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

Last-Modifiedtiêu đề cho trình duyệt biết rằng về cơ bản tệp này không bao giờ được sửa đổi. Cache-Controlnói với proxy và cổng không lưu bộ đệm tài liệu nhưng bảo trình duyệt lưu nó trong 1 năm.

Lần sau trình duyệt yêu cầu tài liệu, nó sẽ gửi If-Modified-SinceIf-None-Matchtiêu đề. Chúng ta có thể sử dụng chúng để trả 304 Not Modifiedlời.

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();
}

Bây giờ mỗi khi trình duyệt yêu cầu tracking.jsmáy chủ của chúng tôi sẽ phản hồi với 304 Not Modifiedkết quả và buộc thực thi bản sao cục bộ tracking.js.

Tôi vẫn không hiểu. Giải thích cho tôi

Giả sử người dùng xóa lịch sử duyệt web của họ và làm mới trang. Thứ duy nhất còn lại trên máy tính người dùng là một bản sao tracking.jstrong bộ đệm của trình duyệt. Khi trình duyệt yêu cầu, tracking.jsnó nhận được 304 Not Modifiedphản hồi khiến nó thực thi phiên bản đầu tiên của tracking.jsnó. tracking.jsthực hiện và khôi phục lại những SessionIDgì đã bị xóa.

Thẩm định

Giả sử Haxor X đánh cắp cookie của khách hàng trong khi họ vẫn đăng nhập. Làm thế nào để chúng tôi bảo vệ họ? Mật mã và dấu vân tay trình duyệt để giải cứu. Hãy nhớ định nghĩa ban đầu của chúng tôi SessionIDlà:

BrowserID|ComputerID|randomBytes(256)

Chúng ta có thể thay đổi điều này thành:

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

Ở đâu hk = sign(Timestamp|BrowserID|ComputerID, serverKey).

Bây giờ chúng ta có thể xác nhận SessionIDbằng cách sử dụng thuật toán sau:

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; 

Bây giờ để cuộc tấn công của Haxor hoạt động, họ phải:

  1. Có cùng ComputerID. Điều đó có nghĩa là họ phải có cùng nhà cung cấp ISP là nạn nhân (Tricky). Điều này sẽ cho nạn nhân của chúng tôi cơ hội để thực hiện hành động pháp lý tại đất nước của họ. Haxor cũng phải lấy khóa phiên HTTPS từ nạn nhân (Cứng).
  2. Có cùng BrowserID. Bất cứ ai cũng có thể giả mạo chuỗi User-Agent (Annoying).
  3. Có thể tạo giả của riêng họ SessionID(Rất khó). Khối lượng âm lượng sẽ không hoạt động vì chúng tôi sử dụng dấu thời gian để tạo khóa mã hóa / ký, vì vậy về cơ bản, nó giống như tạo một khóa mới cho mỗi phiên. Trên hết, chúng tôi mã hóa các byte ngẫu nhiên để một cuộc tấn công từ điển đơn giản cũng không còn là vấn đề.

Chúng tôi có thể cải thiện xác thực bằng cách chuyển tiếp GoogleIDFingerprintID(thông qua ajax hoặc các trường ẩn) và khớp với các trường đó.

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

1
đây là một câu trả lời hay Quá nhiều thông tin. Tôi ngạc nhiên khi bạn không có nhiều upvote. Tôi thực sự không thể tin rằng kỹ thuật với svss và jsonp tồn tại, nhưng nó phải. Có thư viện nào không phù hợp với kỹ thuật như vậy khi cookie / localStorage / sessionStorage bị vô hiệu hóa không?
faceyspacey.com

Ngoài ra, tôi tự hỏi liệu có phiên bản nâng cao này chỉ đơn giản là sử dụng tệp theo dõi được lưu trong bộ nhớ cache của bạn (hoặc nhiều tệp như vậy) để sử dụng nó như bản chất localStorage / cookie, tức là để nhớ nhiều dữ liệu. Ý tưởng sẽ là một thư viện có các phương thức như storageFacade.setItemvà 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 manifest` của tất cả các khác biệt được tạo trong phiên được tạo tự động mỗi lần.
faceyspacey.com

Nếu tệp kê khai chỉ được tạo một lần trong một thời gian, về cơ bản, nó sẽ giới hạn số lượng bảng kê khai được tạo. Và sau đó trong javascript, bạn có thể cố gắng yêu cầu tất cả các biểu hiện có thể được tạo, và sau đó sử dụng biểu thức mới nhất để xây dựng lại trạng thái từ các ảnh chụp nhanh khác nhau. Nếu chúng ta chỉ có khác biệt, có thể có hàng trăm hoặc hàng ngàn và đó có thể là một vấn đề về hiệu suất để cố gắng tìm nạp tất cả cho đến khi một lần thất bại. Tức là bạn tìm nạp diff hoặc tệp kê khai tăng dần: manifest-1.js, manifest-2.js, v.v., cho đến khi một lỗi (vì nó không tồn tại). Điều đó có nghĩa là bạn có tất cả các biểu hiện (hoặc khác biệt)
faceyspacey.com

@ faceyspacey.com Xin lỗi không có thư viện bao giờ. Bạn phải mã hóa và liên tục cập nhật giải pháp tùy chỉnh của riêng bạn. Hãy suy nghĩ về nó. Ngay khi bạn phát triển một lib cho điều này, tất cả các trình chặn / trình duyệt / vv sẽ ngay lập tức chống lại nó. Lý do duy nhất làm việc này là vì nó phụ thuộc vào một tính năng trình duyệt cốt lõi rất quan trọng mà đơn giản là họ sẽ không xóa / tắt: CACHING. Tôi liên tục mất thông tin đăng nhập và mật khẩu của tôi. Và vì tôi không hỏi nhiều câu hỏi nữa, tôi không cần phải trả lời nhiều để tôi có thể để lại tiền thưởng với danh tiếng. Tôi chỉ thấy điều này và nhận ra không có câu trả lời thực sự.
Walter

30

Không thể xác định các máy tính truy cập một trang web mà không có sự hợp tác của chủ sở hữu. Tuy nhiên, nếu họ cho phép bạn, bạn có thể lưu trữ cookie để xác định máy khi máy truy cập lại trang web của bạn. Điều quan trọng là, khách truy cập được kiểm soát; họ có thể xóa cookie và xuất hiện với tư cách là khách truy cập mới bất cứ lúc nào họ muốn.


7
Nếu anh ta truy cập trang web của bạn với 3 trình duyệt khác nhau, thì anh ta sẽ có 3 cookie khác nhau vì cookie không được chia sẻ giữa các ứng dụng. Hơn nữa, nếu anh ta sử dụng DHCP thay vì địa chỉ IP tĩnh, có thể anh ta sẽ không có cùng địa chỉ IP cho máy tính của mình lâu.
JohnnySoftware

2
Có và không. Dấu vân tay trình duyệt xác định một hồ sơ trình duyệt với xác suất cao, nhưng đó không phải là nhận dạng một-một tuyệt đối được tìm kiếm trong câu hỏi này. Nó cũng khá đơn giản (nhưng có lẽ không dễ ) cho một người dùng thông thái có thể tránh né một cách có chủ ý nếu họ muốn.
erickson

30

Một khả năng là sử dụng cookie flash :

  • Tính khả dụng phổ biến (95 phần trăm khách truy cập có thể sẽ có flash)
  • Bạn có thể lưu trữ nhiều dữ liệu hơn trên mỗi cookie (tối đa 100 KB)
  • Được chia sẻ trên các trình duyệt, do đó nhiều khả năng nhận dạng duy nhất một máy
  • Xóa cookie trình duyệt không xóa cookie flash.

Bạn sẽ cần xây dựng một bộ phim flash nhỏ (ẩn) để đọc và viết chúng.

Dù bạn chọn tuyến đường nào, hãy đảm bảo người dùng của bạn chọn IN để được theo dõi, nếu không bạn sẽ xâm phạm quyền riêng tư của họ và trở thành một trong những kẻ xấu.


5
Nhiều người dùng sử dụng Flashblock. Flash sẽ được kích hoạt từ người dùng bằng một cú nhấp chuột nếu anh ta muốn nhìn thấy nó.
Horcrux7

3
Có các phương pháp để loại bỏ cookie, nhưng chúng vượt quá người dùng trung bình. Có các trang trên trang web của Adobe để xem và xóa LSO (Đối tượng chia sẻ cục bộ en.wikipedia.org/wiki/Local_Shared_Object ) mặc dù đối với người dùng Firefox, tiện ích bổ sung Objection là phương pháp dễ nhất để xóa chúng
Sam Hasler

Tôi nghĩ rằng đây là một trong những giải pháp tốt nhất. Youtube, Google, vv sử dụng LSO để chống lạm dụng.
Uku Loskit

4
Cookie flash dễ dàng bị xóa như cookie HTTP trong các phiên bản hiện đại của Firefox và Chrome: 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
Tình hình đã thay đổi trong chín năm qua. Ngày nay, 95% người dùng thậm chí không sử dụng máy tính để bàn và thiết bị di động chưa bao giờ thực sự chấp nhận Adobe Flash Player.
Damian Yerrick

21

Bạn có thể muốn thử đặt một ID duy nhất trong evercookie (nó sẽ hoạt động trên trình duyệt chéo, xem Câu hỏi thường gặp của họ): http://samy.pl/evercookie/

Ngoài ra còn có một công ty tên là ThreatMetrix được rất nhiều công ty lớn sử dụng để giải quyết vấn đề này: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Chúng khá đắt và một số các sản phẩm khác của họ không tốt lắm, nhưng id thiết bị của họ hoạt động tốt.

Cuối cùng, có triển khai jquery mã nguồn mở của ý tưởng panopticlick: https://github.com/carlo/jquery-browser-fingerprint Nó có vẻ như được nướng một nửa ngay bây giờ nhưng có thể được mở rộng.

Hy vọng nó giúp!


+ 1 - Brian - Thông tin tuyệt vời! Tất cả điều này đã được chứng minh rất hữu ích. Cảm ơn bạn. Đừng thêm thông tin nếu bạn không học thêm nữa.
Ben O

1
Về evercookie. Đã thử với Opera. Đặt cookie, sau đó xóa tất cả lịch sử khỏi Opera, sau đó đóng Opera, mở lại nhấp vào Click to rediscover cookiesvà xem null hoặc không xác định. Vì vậy, điều này không làm việc cho tôi
Andris

Đã thử trang mẫu với chế độ Riêng tư iOS Safari và ẩn Chrome trên máy tính để bàn, cookie không thể được truy xuất sau khi trình duyệt khởi động lại.
Morio

20

Có một phương pháp phổ biến được gọi là vẽ dấu vân tay, được mô tả trong bài báo khoa học này: Web Không bao giờ quên: Cơ chế theo dõi liên tục trong tự nhiên . Khi bạn bắt đầu tìm kiếm nó, bạn sẽ ngạc nhiên về mức độ thường xuyên sử dụng nó. Phương pháp tạo ra một dấu vân tay duy nhất, phù hợp với từng kết hợp trình duyệt / phần cứng.

Bài viết này cũng xem xét các phương pháp theo dõi liên tục khác, như evercookies, trả lời các cookie http và Flash và đồng bộ hóa cookie.

Thông tin thêm về dấu vân tay vải ở đây:


1
Vì vậy, nếu hai thiết bị giống hệt nhau (cùng một máy tính, cùng một hệ điều hành, cùng một trình duyệt), dấu vân tay là như nhau, phải không?
xiaoyu2er

Câu hỏi thực tế ở đây là thư viện javascript tôi có thể bỏ mã của mình để sử dụng. Đọc một tấn lý thuyết không giải quyết được các vấn đề phải giải quyết trong vòng 60 phút tới.
Thanocation Ioannidis

11

Chỉ có một lượng nhỏ thông tin mà bạn có thể nhận được thông qua kết nối HTTP.

  1. IP - Nhưng như những người khác đã nói, điều này không cố định đối với nhiều người, nếu không phải hầu hết người dùng Internet do chính sách phân bổ động của ISP.

  2. Chuỗi Useragent - Gần như tất cả các trình duyệt gửi loại trình duyệt nào với mỗi yêu cầu. Tuy nhiên, điều này có thể được đặt bởi người dùng trong nhiều trình duyệt hiện nay.

  3. Bộ sưu tập các trường yêu cầu - Có các trường khác được gửi với mỗi yêu cầu, chẳng hạn như mã hóa được hỗ trợ, v.v. Những trường này, nếu được sử dụng trong tổng hợp có thể giúp ID máy của người dùng, nhưng một lần nữa phụ thuộc vào trình duyệt và có thể thay đổi.

  4. Cookie - Đặt cookie là một cách khác để xác định máy, hay cụ thể hơn là trình duyệt trên máy, nhưng như những người khác đã nói, chúng có thể bị xóa hoặc tắt bởi người dùng và chỉ áp dụng trên trình duyệt, không phải máy móc.

Vì vậy, phản hồi chính xác là bạn không thể đạt được những gì bạn sẽ sống thông qua giao thức HTTP qua giao thức IP. Tuy nhiên, bằng cách sử dụng kết hợp cookie, cũng như IP và các trường trong yêu cầu HTTP, bạn có cơ hội tốt để đoán, sắp xếp, đó là máy gì. Người dùng có xu hướng chỉ sử dụng một trình duyệt và thường từ một máy, do đó, điều này có thể khá dễ tin, nhưng điều này sẽ khác nhau tùy thuộc vào đối tượng ... các kỹ thuật viên có nhiều khả năng gây rối với công cụ này và sử dụng nhiều máy / trình duyệt hơn. Ngoài ra, điều này thậm chí có thể được kết hợp với một số nỗ lực định vị địa lý IP và cũng sử dụng dữ liệu đó. Nhưng trong mọi trường hợp, không có giải pháp nào sẽ chính xác mọi lúc.


10

Có những sai sót với cả cách tiếp cận cookie và không cookie. Nhưng nếu bạn có thể tha thứ cho những thiếu sót của phương pháp cookie, thì đây là một ý tưởng.

Nếu bạn đã sử dụng Google Analytics trên trang web của mình, thì bạn không cần phải viết mã để theo dõi người dùng duy nhất. Google Analytics thực hiện điều đó cho bạn thông qua __utmagiá trị cookie, như được mô tả trong tài liệu của Google . Và bằng cách sử dụng lại giá trị này, bạn sẽ không tạo thêm tải trọng cookie, có lợi ích hiệu quả với các yêu cầu trang.

Và bạn có thể viết một số mã đủ dễ dàng để truy cập giá trị đó hoặc sử dụng chức năng của tập lệnh này getUniqueId() .


Tôi sẽ nhận được cùng một id sử dụng getUniqueId()trong các trình duyệt khác nhau trong cùng một máy chứ?
Ankur Akvaliya

8

Như với các giải pháp trước đây, cookie là một phương pháp tốt, hãy lưu ý rằng chúng xác định trình duyệt mặc dù. Nếu tôi truy cập một trang web trong Firefox và sau đó trong Internet Explorer, cookie sẽ được lưu trữ cho cả hai lần thử một cách riêng biệt. Một số người dùng cũng tắt cookie (nhưng nhiều người hơn cũng tắt JavaScript).

Một phương pháp khác để xem xét sẽ là IP và nhận dạng tên máy chủ (lưu ý rằng chúng có thể khác nhau đối với người dùng IP quay số / không tĩnh, AOL cũng sử dụng IP dạng chăn). Tuy nhiên vì điều này chỉ xác định các mạng nên điều này có thể không hoạt động tốt như cookie.


Điểm hay với địa chỉ IP xác định điểm truy cập vào mạng - với NAT, có thể có toàn bộ các quốc gia ẩn sau một địa chỉ IP duy nhất và bạn sẽ không phải là người khôn ngoan hơn. Với tình trạng thiếu địa chỉ IPv4, bạn vẫn sẽ thấy các công ty hoặc trường học / trường đại học khá lớn chia sẻ một địa chỉ IP duy nhất cho lưu lượng truy cập Internet đi ra.
Piskvor rời khỏi tòa nhà

6

Các đề xuất sử dụng cookie sang một bên, bộ thuộc tính xác định toàn diện duy nhất có sẵn để hỏi cung được chứa trong tiêu đề yêu cầu HTTP. Vì vậy, có thể sử dụng một số tập hợp con trong số này để tạo một định danh giả duy nhất cho tác nhân người dùng (ví dụ: trình duyệt). Hơn nữa, hầu hết các thông tin này có thể đã được đăng nhập vào cái gọi là "nhật ký truy cập" của phần mềm máy chủ web của bạn và nếu không, có thể dễ dàng cấu hình để làm như vậy. Sau đó, một tiện ích có thể được phát triển chỉ đơn giản là quét nội dung của nhật ký này, tạo dấu vân taycủa mỗi yêu cầu bao gồm, ví dụ, địa chỉ IP và chuỗi Tác nhân người dùng, v.v. Càng nhiều dữ liệu có sẵn, thậm chí bao gồm cả nội dung của các cookie cụ thể, làm tăng thêm chất lượng của tính duy nhất của dấu vân tay này. Mặc dù, như nhiều người khác đã tuyên bố, giao thức HTTP không làm cho điều này trở nên hoàn hảo 100% - tốt nhất nó chỉ có thể là một chỉ báo khá tốt.


6

Khi tôi sử dụng một máy chưa bao giờ truy cập trang web ngân hàng trực tuyến của mình, tôi được yêu cầu xác thực bổ sung. sau đó, nếu tôi quay lại lần thứ hai vào trang web ngân hàng trực tuyến, tôi không nhận được yêu cầu xác thực bổ sung ... tôi đã xóa tất cả các cookie trong IE và đăng nhập lại vào trang web ngân hàng trực tuyến của mình để mong được hỏi lại các câu hỏi xác thực. thật ngạc nhiên tôi đã không được hỏi. Điều này có khiến người ta tin rằng ngân hàng đang thực hiện một số loại gắn thẻ pc không liên quan đến cookie không?

Đây là một loại xác thực khá phổ biến được sử dụng bởi các ngân hàng.

Giả sử bạn đang truy cập trang web ngân hàng của mình qua example-isp.com. Lần đầu tiên bạn đến đó, bạn sẽ được hỏi mật khẩu, cũng như xác thực bổ sung. Khi bạn đã vượt qua, ngân hàng biết rằng người dùng "thatisvaliant" được xác thực để truy cập trang web qua example-isp.com.

Trong tương lai, nó sẽ không yêu cầu xác thực thêm (ngoài mật khẩu của bạn) khi bạn truy cập trang web qua example-isp.com. Nếu bạn cố gắng truy cập vào ngân hàng qua other-isp.com, ngân hàng sẽ lại thực hiện lại quy trình tương tự.

Vì vậy, để tóm tắt, những gì ngân hàng xác định là ISP và / hoặc netblock của bạn, dựa trên địa chỉ IP của bạn. Rõ ràng không phải mọi người dùng tại ISP của bạn là bạn, đó là lý do tại sao ngân hàng vẫn hỏi bạn mật khẩu của bạn.

Bạn đã bao giờ có một cuộc gọi công ty thẻ tín dụng để xác minh rằng mọi thứ đều ổn khi bạn sử dụng thẻ tín dụng ở một quốc gia khác? Cùng một khái niệm.


4

Thực sự, những gì bạn muốn làm không thể được thực hiện bởi vì các giao thức không cho phép điều này. Nếu IP tĩnh được sử dụng phổ biến thì bạn có thể làm điều đó. Họ không phải, vì vậy bạn không thể.

Nếu bạn thực sự muốn xác định người , hãy để họ đăng nhập.

Vì họ có thể sẽ di chuyển đến các trang khác nhau trên trang web của bạn, bạn cần một cách để theo dõi chúng khi họ di chuyển.

Miễn là họ đã đăng nhập và bạn đang theo dõi phiên của họ trong trang web của bạn thông qua cookie / tham số liên kết / đèn hiệu / bất cứ điều gì, bạn có thể chắc chắn rằng họ đang sử dụng cùng một máy tính trong thời gian đó.

Cuối cùng, không đúng khi nói điều này cho bạn biết họ đang sử dụng máy tính nào nếu người dùng của bạn không sử dụng mạng cục bộ của riêng bạn và không có địa chỉ IP tĩnh.

Nếu những gì bạn muốn làm được thực hiện với sự hợp tác của người dùng và chỉ có một người dùng cho mỗi cookie và họ sử dụng một trình duyệt web duy nhất, chỉ cần sử dụng cookie.


3

Cookies sẽ không hữu ích để xác định khách truy cập duy nhất. Một người dùng có thể xóa cookie và làm mới trang web - sau đó anh ta được phân loại lại thành người dùng mới.

Tôi nghĩ rằng cách tốt nhất để thực hiện điều này là triển khai giải pháp phía máy chủ (vì bạn sẽ cần một nơi nào đó để lưu trữ dữ liệu của mình). Tùy thuộc vào mức độ phức tạp của nhu cầu của bạn đối với dữ liệu đó, bạn sẽ cần xác định những gì được phân loại là một lượt truy cập duy nhất. Một phương pháp hợp lý sẽ là cho phép một địa chỉ IP quay trở lại vào ngày hôm sau và được cung cấp một lượt truy cập duy nhất. Một số lượt truy cập từ một địa chỉ IP trong một ngày không nên được tính là duy nhất.

Ví dụ, sử dụng PHP, việc lấy địa chỉ IP của khách truy cập và lưu trữ nó trong tệp văn bản (hoặc cơ sở dữ liệu sql) là chuyện nhỏ.

Một giải pháp phía máy chủ sẽ hoạt động trên tất cả các máy, bởi vì bạn sẽ theo dõi người dùng khi anh ta tải trang web của bạn lần đầu tiên. Không sử dụng javascript, vì điều đó có nghĩa là cho kịch bản phía máy khách, cộng với người dùng có thể đã vô hiệu hóa nó trong mọi trường hợp.

Mong rằng sẽ giúp.


4
Vợ tôi và tôi duyệt từ bốn máy tính khác nhau đằng sau tường lửa NAT ở nhà. Chúng tôi hiển thị là có cùng một IP, do đó, theo sơ đồ của bạn, chúng tôi hiển thị là cùng một người dùng.
Adam Ness

Điều gì xảy ra nếu trong mysql để viết các biến bổ sung (được đề cập ở đây panopticlick.eff.org/browser-uniquety.pdf )? Vì vậy, địa chỉ IP sẽ giống nhau, nhưng một số đặc điểm khác có thể khác.
Andris

3

Bởi vì tôi muốn giải pháp hoạt động trên tất cả các máy và tất cả các trình duyệt (trong lý do), tôi đang cố gắng tạo một giải pháp bằng cách sử dụng javascript.

Đó không phải là một lý do thực sự tốt để không sử dụng javascript?

Như những người khác đã nói - cookie có lẽ là lựa chọn tốt nhất của bạn - chỉ cần nhận thức được những hạn chế.


3

Bạn có thể sử dụng vân tay2

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 
})

Sau đó, bạn có thể kiểm tra tất cả người dùng của mình so với hiện tại và kiểm tra độ tương tự JSON, vì vậy ngay cả khi dấu vân tay của họ bị đột biến, bạn vẫn có thể theo dõi họ


2

Tôi đoán phán quyết là tôi không thể lập trình duy nhất một máy tính đang truy cập trang web của tôi.

Tôi có câu hỏi sau đây. Khi tôi sử dụng một máy chưa bao giờ truy cập trang web ngân hàng trực tuyến của mình, tôi được yêu cầu xác thực bổ sung. sau đó, nếu tôi quay lại lần thứ hai vào trang web ngân hàng trực tuyến, tôi không nhận được yêu cầu xác thực bổ sung. Đọc câu trả lời cho câu hỏi của tôi, tôi quyết định nó phải là một cookie liên quan. do đó, tôi đã xóa tất cả các cookie trong IE và đăng nhập lại vào trang web ngân hàng trực tuyến của mình để mong được hỏi lại các câu hỏi xác thực. thật ngạc nhiên tôi đã không được hỏi. Điều này có khiến người ta tin rằng ngân hàng đang thực hiện một số loại gắn thẻ pc không liên quan đến cookie không?

hơn nữa, sau nhiều ngày hôm nay tôi đã tìm thấy công ty sau đây tuyên bố bán một giải pháp xác định duy nhất các máy truy cập một trang web. http://www.the41.com/products.asp .

Tôi đánh giá cao tất cả các thông tin tốt nếu bạn có thể làm rõ thêm thông tin mâu thuẫn này tôi thấy tôi sẽ đánh giá rất cao nó.


Dựa trên điều này: the41.com/doad/ Từ Có vẻ như giải pháp của họ là khiến người dùng tải xuống một phần mềm tạo ra một mã định danh duy nhất dựa trên máy và liên kết nó với một số thông tin đăng nhập.
mmacaulay

Như đã đề cập, bạn đã không loại trừ ngân hàng của mình bằng cookie Flash. Cách xóa cookie Flash và các cuộc thảo luận khác về vấn đề này: tips.vlaurie.com/2007/10/24/ trên
micahwittman

Tôi đoán: Ngân hàng có thể tin tưởng rằng bạn là bạn nếu bạn (1) biết tên người dùng của bạn, (2) biết mật khẩu của bạn và (3a) có cookie của họ, hoặc người khác (3b) đến từ địa chỉ IP mà họ đã có trước đây liên kết với bạn
Zack Peterson

2

Tôi sẽ làm điều này bằng cách sử dụng kết hợp cookie và flash cookie. Tạo một GUID và lưu trữ nó trong một cookie. Nếu cookie không tồn tại, hãy thử đọc nó từ cookie flash. Nếu vẫn không tìm thấy, hãy tạo nó và ghi nó vào flash cookie. Bằng cách này, bạn có thể chia sẻ cùng GUID trên các trình duyệt.


1

Tôi nghĩ rằng cookie có thể là những gì bạn đang tìm kiếm; đây là cách hầu hết các trang web xác định duy nhất khách truy cập.


0

Giả sử bạn không muốn người dùng kiểm soát, bạn không thể. Web không hoạt động như vậy, điều tốt nhất bạn có thể hy vọng là một số phương pháp phỏng đoán.

Nếu đó là một tùy chọn để buộc khách truy cập của bạn cài đặt một số phần mềm và sử dụng TCPA, bạn có thể rút ra một cái gì đó.


0

Bài viết của tôi có thể không phải là một giải pháp, nhưng tôi có thể cung cấp một ví dụ, trong đó tính năng này đã được triển khai.

Nếu bạn truy cập trang đăng ký của www.supertorrents.org lần đầu tiên từ máy tính của bạn, thì tốt thôi. Nhưng nếu bạn làm mới trang hoặc mở lại trang, nó sẽ xác định bạn đã truy cập trang trước đó. Vẻ đẹp thực sự ở đây - nó xác định ngay cả khi bạn cài đặt lại Windows hoặc hệ điều hành khác.

Tôi đọc ở đâu đó rằng họ lưu trữ ID CPU. Mặc dù tôi không thể tìm ra cách họ làm điều đó, tôi thực sự nghi ngờ điều đó và họ có thể sử dụng Địa chỉ MAC để làm điều đó.

Tôi chắc chắn sẽ chia sẻ nếu tôi tìm cách làm điều đó.


www.supertorrents.org đã chết
Bộ công cụ

0

Thủ thuật:

  1. Tạo 2 trang đăng ký:

    Trang đăng ký đầu tiên: không có bất kỳ email hoặc kiểm tra bảo mật nào (chỉ với tên người dùng và mật khẩu)

    Trang đăng ký thứ hai: với mức độ bảo mật cao (yêu cầu xác minh email và hình ảnh bảo mật, v.v.)

  2. Để làm hài lòng khách hàng và đăng ký dễ dàng, trang đăng ký mặc định phải là (Trang đăng ký đầu tiên) nhưng trong (Trang đăng ký đầu tiên) có một hạn chế ẩn. Đó là hạn chế IP. Nếu một IP cố gắng đăng ký lần thứ hai, (ví dụ dưới 1 giờ) thay vì hiển thị trang chặn. bạn có thể tự động hiển thị (Trang đăng ký thứ hai) .

  3. trong (Trang đăng ký đầu tiên) bạn có thể đặt (ví dụ: chặn 2 lần thử từ 1 ip chỉ trong 1 giờ hoặc 24 giờ) và sau (ví dụ) 1 giờ, bạn có thể tự động mở quyền truy cập từ ip đó

Xin lưu ý: (Trang đăng ký đầu tiên)(Trang đăng ký thứ hai) không nên ở các trang riêng biệt. bạn làm chỉ 1 trang. (ví dụ: register.php) và làm cho nó thông minh để chuyển đổi giữa Kiểu PHP thứ nhất và Kiểu PHP thứ hai


Mahdi Jazini. Tất cả đều đúng nhưng câu hỏi của tôi là làm thế nào để xác định địa chỉ IP của máy khách. Xin cảm ơn.
JENKIN J
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.