it-swarm-vi.com

Các trang web có thể phát hiện xem bạn có đang sử dụng chế độ duyệt web riêng tư không?

Hầu hết các trình duyệt hiện đại đều hỗ trợ " chế độ duyệt riêng tư " (còn được gọi là Chrome là "Chế độ ẩn danh"), trong đó trình duyệt không lưu bất kỳ thông tin nào vào đĩa về trình duyệt của bạn Trong khi ở chế độ này.

Trong các trình duyệt hiện đại, một trang web có thể phát hiện xem người dùng đang truy cập trang web có bật chế độ duyệt web riêng tư hay không?

Nghiên cứu cơ bản tôi đã thực hiện. Đây là những gì tôi có thể tìm thấy liên quan đến câu hỏi này. Thật không may, nó không thực sự trả lời câu hỏi trên.

  • Một nghiên cứu năm 201 của chế độ duyệt web riêng tư cho thấy các trang web có thể phát hiện xem trình duyệt có ở chế độ duyệt web riêng tư hay không, bằng cách sử dụng một cuộc tấn công đánh hơi lịch sử CSS. (Trong chế độ duyệt web riêng tư, các trang web không được thêm vào lịch sử, do đó bạn có thể sử dụng đánh hơi lịch sử để kiểm tra xem khách truy cập có ở chế độ duyệt riêng tư hay không.) Kể từ đó, các trình duyệt hiện đại đã kết hợp phòng thủ - chống lại CSS tấn công đánh hơi lịch sử.

    Do đó, tôi không mong đợi phương pháp phát hiện xem trình duyệt ở chế độ duyệt web riêng tư có thành công nữa hay không. (Tôi nhận ra sự phòng thủ chống lại việc đánh hơi lịch sử là không hoàn hảo , nhưng chúng có thể đủ tốt cho những mục đích này.)

  • Có thể có cách cho một trang web bạn đang truy cập tìm hiể cho dù bạn hiện đang đăng nhập vào các trang web khác (nghĩ: Facebook). Nếu người dùng hiện đang đăng nhập vào các dịch vụ khác (như Facebook), một trang web có thể đoán chắc chắn rằng người dùng hiện không sử dụng chế độ duyệt web riêng tư - đây không phải là điều chắc chắn, nhưng có lẽ người ta có thể đưa ra một số suy luận xác suất. Tuy nhiên, nếu người dùng không đăng nhập vào các dịch vụ khác, thì tôi đoán tất cả những gì chúng tôi có thể nói là chúng tôi không biết liệu chế độ duyệt web riêng tư có được sử dụng hay không. Có thể điều này có thể mang lại một sự rò rỉ thông tin một phần, tôi cho rằng, nhưng nó nghe có vẻ không đáng tin cậy nhất - nếu nó thậm chí hoạt động. Nó cũng có thể là điều này có thể không hoạt động.

Vì vậy, bất cứ ai cũng có thể cung cấp bất kỳ thông tin gần đây nào về việc liệu có một cách để một trang web kiểm tra xem khách truy cập của nó có đang sử dụng chế độ duyệt web riêng tư không?

64
D.W.

Tôi không chắc chắn bạn có thể đáng tin cậy phát hiện duyệt web riêng tư, nhưng tôi nghĩ rằng bạn có thể áp dụng một số phương pháp phỏng đoán để đoán chính xác rằng người dùng là sử dụng các tính năng tăng cường bảo mật khác nhau. Như đã nêu trong nhận xét của tôi về câu hỏi, liệu điều này có đủ tốt hay phù hợp với ứng dụng của bạn hay không phụ thuộc vào những gì bạn muốn có thể làm trong phản ứng phát hiện duyệt web riêng tư. Như Sonny Ordell đã đề cập, tôi cũng không chắc chắn rằng bạn có thể phân biệt duyệt web riêng tư với việc sử dụng đặc biệt các tính năng nâng cao quyền riêng tư khác nhau (ví dụ: xóa lịch sử hoặc cookie thủ công).

Giả sử bạn vận hành một ứng dụng web và bạn muốn phát hiện khi một trong những người dùng của bạn (có tài khoản) chuyển sang duyệt web riêng tư. Tôi xác định rằng người dùng có tài khoản, vì chiến lược này phụ thuộc vào việc theo dõi các bit dữ liệu hành vi khác nhau. Các khía cạnh của duyệt web riêng tư là (ít nhất là trong Firefox ): lịch sử, biểu mẫu/mục tìm kiếm, mật khẩu, tải xuống, cookie, bộ nhớ cache, lưu trữ DOM. Tôi không chắc chắn làm thế nào để thăm dò tải xuống, nhưng tôi nghĩ những người khác có thể được thăm dò. Nếu bạn nhận được một phát hiện tích cực trên tất cả chúng, có vẻ như nhiều khả năng người dùng của bạn đang duyệt web riêng tư.

  • Trong trường hợp tầm thường, bạn theo dõi (IP, user-agent) cho mỗi người dùng. Khi bạn nhận được yêu cầu không có cookie cho kết quả trùng khớp (IP, UA) ghi lại, bạn có thể suy luận rằng người dùng tương ứng là duyệt web riêng tư. Phương pháp này không thành công (không phát hiện) nếu:

    1. Anh ta sử dụng một cái gì đó như ProxySwitchy hoặc TorButton để kích hoạt Tor trong khi duyệt web riêng tư, do đó thay đổi IP.
    2. Anh ta chuyển sang một trình duyệt khác (ví dụ: thường sử dụng FF và chuyển sang Chrome cho chế độ Ẩn danh).
    3. Việc chuyển sang duyệt web riêng tư không phải là ngay lập tức và ISP của anh ấy đã cấp một IP mới (ví dụ: vào thứ Sáu, anh ấy là 10.1.2.3, anh ấy đã không sử dụng ứng dụng của bạn vào cuối tuần và vào thứ Hai, anh ấy là 10.1.4.5).

    Như đã đề cập trong Câu trả lời của Sonny Ordell , nếu một người khác sử dụng cùng một trình duyệt ở chế độ duyệt riêng tư để truy cập vào một tài khoản riêng trên trang web của bạn, bạn sẽ nhận được một phát hiện - nhưng đây là trường hợp hơi khác hơn là nếu người dùng "bình thường" chỉ cần chuyển sang chế độ duyệt web riêng tư.

    Bạn sẽ nhận được kết quả dương tính giả nếu người dùng chỉ cần xóa cookie của mình cho trang web của bạn hoặc sử dụng cấu hình phụ (ví dụ: tôi giữ một vài cấu hình Firefox khác nhau với các bộ plugin khác nhau để thử nghiệm nhất định và/hoặc để tránh theo dõi, mặc dù tôi 'tôi đoán điều này là rất hiếm).

  • Khi kiểm tra phức tạp hơn, bạn có thể sử dụng một cái gì đó như Panopticlick của EFF và duy trì dấu vân tay của trình duyệt (hoặc bộ sưu tập dấu vân tay) thay vì chỉ UA cho mỗi người dùng. Điều này không thành công trong tình huống 2 được đề cập ở trên (ví dụ: nếu người dùng chỉ sử dụng FF để duyệt nhận dạng và Chrome cho ẩn danh). Dấu vân tay sẽ chung chung hơn (và do đó ít hữu ích hơn) nếu người dùng đã bị vô hiệu hóa javascript. Dấu vân tay sẽ thay đổi nếu người dùng kích hoạt chọn lọc javascript trong các phiên khác nhau (ví dụ: NoScript với các trang web được phép tạm thời).

  • Bạn có thể đánh bại vấn đề 1 (Tor) bằng cách phát hiện quyền truy cập thông qua nút thoát Tor và kết hợp điều này với dấu vân tay. Điều này có vẻ như nó sẽ chỉ hữu ích trong một phạm vi hẹp.

  • Thay vì chỉ cookie cho các kiểm tra ở trên, hãy kiểm tra localStorage. Nếu nó thường được bật và khóa của bạn không có trong bộ lưu trữ cho lần truy cập này và dấu vân tay trùng khớp thì đây có thể là trình duyệt riêng tư. Rõ ràng, nếu người dùng thường bị vô hiệu hóa lưu trữ, thì bạn không thể sử dụng nó. Các chế độ thất bại tương tự như các chế độ được mô tả ở trên cho cookie.

  • Tôi chưa thử nghiệm hoặc phát triển ý tưởng, nhưng tôi cho rằng bạn có thể chơi trò chơi với Cache-Control. (Nhanh chóng tìm kiếm tiết lộ rằng đây không phải là ý tưởng ban đầu - dự án đó có giao diện giống như mã bằng chứng.) Chiến lược này thất bại nếu người dùng đi qua một proxy lưu trữ được chia sẻ - trang trong khi đó đề cập đến ẩn danh.com. Firefox, ít nhất, không sử dụng bộ đệm trong chế độ duyệt web riêng tư. (Xem trang web này để xem bản demo theo dõi dựa trên bộ đệm.) Vì vậy, bạn có thể kết hợp điều này với UA/dấu vân tay được đề cập ở trên: nếu trình theo dõi bộ nhớ cache của bạn cho biết đây là lần truy cập đầu tiên, thì bạn có thể đoán rằng người dùng đang duyệt web riêng tư. Điều này không thành công với dương tính giả nếu người dùng xóa bộ nhớ cache của mình; kết hợp với các kỹ thuật khác để có được một dự đoán tốt hơn.

  • Bạn có thể phát hiện và theo dõi, đối với mỗi người dùng, cho dù trình duyệt tự động điền một thành phần biểu mẫu nhất định. Nếu bạn phát hiện ra rằng một người dùng nhất định không nhận được tự động điền vào phần tử biểu mẫu đó, bạn có thể suy ra trình duyệt riêng tư. Điều này là dễ vỡ - có lẽ người dùng không sử dụng máy tính "chính" của mình, nhưng bạn có thể kết hợp nó với dấu vân tay như đã đề cập ở trên để dự đoán đáng tin cậy hơn.

  • Tấn công thời gian kênh bên: phát hiện và theo dõi thời gian điển hình cần thiết cho mỗi người dùng để đăng nhập vào ứng dụng của bạn. Sẽ có các biến thể, nhưng tôi đoán rằng bạn có thể đoán chính xác về việc ai đó đang sử dụng tự động điền mật khẩu. Nếu người dùng thường sử dụng tự động điền mật khẩu (nghĩa là chuyển nhanh qua trang đăng nhập), và sau đó cho một lượt truy cập nhất định (có dấu vân tay phù hợp) không sử dụng tự động điền, bạn có thể suy luận duyệt web riêng tư. Một lần nữa điều này là dễ vỡ; kết hợp với các kỹ thuật khác để dự đoán tốt hơn. Bạn cũng sẽ muốn phát hiện và sửa lỗi cho độ trễ mạng khi tải trang nhất định (ví dụ: có lẽ mạng của người dùng chỉ chậm vào một ngày nhất định và quá trình chuyển đổi trang đăng nhập chậm chỉ là độ trễ và không thiếu tự động điền). Bạn có thể hơi ác và tự động đăng xuất người dùng (cung cấp cho họ thông báo lỗi không có thật, "vui lòng thử lại") để có được điểm dữ liệu thứ hai nếu bạn sẵn sàng làm phiền người dùng của mình một chút.

  • Kết hợp điều này với những gì bạn đã đề cập trong câu hỏi về việc phát hiện xem người dùng có đăng nhập vào các dịch vụ khác không (ví dụ: Facebook) và bạn có thể tự tin hơn trong dự đoán của mình.

  • Nếu bạn thực sự có động lực, bạn có thể chơi trò chơi với DNS và theo dõi thời gian tải trang. Một thử nghiệm nhanh về FF 3.6 và Chrome 15 dường như chỉ ra rằng không trình duyệt nào xóa bộ đệm DNS ở chế độ duyệt riêng tư. Và trình duyệt hoàn toàn không kiểm soát bộ đệm DNS của hệ thống cục bộ. Nếu bạn sử dụng một cuộc tấn công thời gian DNS kênh bên để thực hiện theo dõi người dùng như một cách thay thế (hoặc ngoài) dấu vân tay, bạn có thể đoán được độ tin cậy cao hơn. Tôi không chắc việc theo dõi đáng tin cậy qua thời gian DNS sẽ như thế nào.

Việc phát hiện người dùng "ẩn danh" trong chế độ duyệt web riêng tư sẽ khó khăn hơn nhiều vì bạn chưa có cơ hội tích lũy dữ liệu về hành vi "điển hình" của họ. Và, vì hầu hết các tính năng chỉ hoạt động khi chúng kết thúc phiên trình duyệt, bạn không thực sự biết liệu chúng có trở lại hay không.

Như đã nói, đây là một ý tưởng để phát hiện trình duyệt riêng tư của người dùng ẩn danh, nếu bạn sẵn sàng trở nên xấu xa và bạn có một số tài nguyên mà bạn biết rằng người dùng sẵn sàng cho trang web của bạn cơ hội thứ hai và bạn có thể buộc người dùng để kích hoạt javascript. Theo dõi dấu vân tay, đặt cookie liên tục, localStorage, bộ đệm - bất cứ điều gì bạn có thể làm để theo dõi người dùng. Nếu đó là lần truy cập đầu tiên theo dấu vân tay của bạn, hãy sập/treo trình duyệt qua javascript (hoặc flash hoặc bất kỳ thủ đoạn xấu xa nào bạn biết). Hút hàng tấn bộ nhớ hoặc bị kẹt trong một vòng lặp hoặc bất cứ điều gì cần thiết để người dùng đóng trình duyệt. Sau đó, khi họ trở lại, bạn sẽ thấy (từ dấu vân tay) rằng đó là lần truy cập thứ hai. Nếu cookie/lưu trữ/bộ nhớ cache/vv không được đặt, thì bạn có thể suy ra rằng phiên đầu tiên là duyệt web riêng tư và tôi cho rằng bạn có thể suy ra rằng phiên thứ hai có thể cũng là duyệt riêng tư. Điều này rõ ràng thất bại nếu người dùng không quay lại hoặc nếu bạn không thể sụp đổ/thuyết phục họ giết cửa sổ trình duyệt. Như một phần thưởng, nếu bạn gửi chúng đến một URL tùy chỉnh và chúng ở chế độ không riêng tư và khôi phục phiên duyệt thì bạn có thể đoán chúng không ở chế độ duyệt riêng tư (trừ khi chúng đánh dấu URL).

Tất cả mọi thứ ở trên đều đầy lỗ hổng - rất nhiều chỗ cho những mặt tích cực hoặc tiêu cực sai. Có lẽ bạn sẽ không bao giờ biết nếu tôi đang sử dụng trình duyệt riêng tư hoặc nếu tôi đang chạy trình duyệt trong VM không có bộ nhớ liên tục. (Sự khác biệt là gì?)

Điều tồi tệ nhất có lẽ là nếu bạn làm nhận được câu trả lời bằng một phương pháp đáng tin cậy để phát hiện duyệt web riêng tư thì dường như không thể tồn tại được lâu vì các trình duyệt "sửa" nó hoặc người dùng tìm cách giải quyết để tránh bị phát hiện.

30
bstpierre

Kiểm tra lưu trữ cục bộ HTML 5 cho phép bạn phát hiện chế độ duyệt web riêng tư ngay bây giờ (2019). Nó hoạt động bằng cách cố gắng viết sau đó đọc "Lưu trữ cục bộ".

xem:

https://Gist.github.com/jherax/a81c8c132d09cc354a0e2cb911841ff1

hoặc là

https://github.com/jLynx/PrivateWindowCheck với PoC

  ------ edit to add functional description ----

Từ liên kết jherax ở trên:

...
    // **Firefox**
    if ('MozAppearance' in document.documentElement.style) {
      if (indexedDB === null) return yes();
      const db = **indexedDB.open**('test');
      db.onerror = yes;
      db.onsuccess = not;
      return void 0;
---

Từ jLynx ở trên

...
        } else if(navigator.userAgent.includes("Firefox")){
            //Firefox
            var db = indexedDB.open("test");
            db.onerror = function(){resolve(true);};
            db.onsuccess =function(){resolve(false);};
---

Trong cả hai ví dụ, việc không mở bộ nhớ cục bộ liên tục, indexDB cho Firefox, (được xác định bởi HTML 5) duyệt web riêng tư. Các trình duyệt khác gọi bộ nhớ cục bộ bằng các tên khác nhau, chẳng hạn như localStorage, đi hình.

10
user10216038

Bạn có thể sử dụng phương pháp phỏng đoán để đoán chắc chắn. Ví dụ, trong IE10 và IE11 (và Safari, IIRC), các ngoại lệ được đưa ra khi cố gắng sử dụng IndexedDB như một gợi ý mạnh mẽ rằng trình duyệt là chế độ InPrivate.

Tương tự, hệ thống DRM của Adobe (được sử dụng bởi HBOGO, rõ ràng) xuất hiện mã lỗi khi trình duyệt là InPrivate/Ẩn danh, vì "tạo tác giấy phép" bắt buộc không được phép tạo trong chế độ riêng tư. https://forums.Adobe.com/thread/1189199

8
EricLaw

Tôi thấy có một tiền thưởng vì bạn muốn có một câu trả lời chính xác và cập nhật hơn, nhưng sự thật là câu trả lời đúng đã được đưa ra bởi những người khác. Tôi chỉ có thể cung cấp cho bạn thêm một vài chi tiết, mặc dù tôi không phải là nhà phát triển JS và tôi cũng chưa bao giờ biết công cụ này hoạt động như thế nào.

Câu trả lời ngắn gọn là: họ sử dụng JavaScript để triển khai một số loại heuristic chủ yếu kiểm tra xem một số chức năng có sẵn hay không.

Hãy xem bostonglobe.com Chẳng hạn. Nhấp vào một bài viết trong khi ở chế độ riêng tư và bạn sẽ thấy thông báo: "Bạn đang ở chế độ riêng tư, v.v.". Nếu bạn tắt JavaScript, thông báo đó sẽ không xuất hiện, điều đó có nghĩa là nó đã được thực hiện trong JS. Điều tương tự cũng đúng nếu bạn đến New York Times, đó chỉ là JS. Nhưng làm thế nào để họ làm điều đó chính xác? Trên bostonglobe.com Tôi đã tìm thấy mã trong tệp JS có tên meter.js Trong nguồn. Nếu bạn tìm kiếm trong mã đó cho detectPrivateMode bạn sẽ thấy chức năng mà nó sử dụng. Nó bị thu nhỏ, vì vậy thật khó đọc. Tuy nhiên, việc chỉnh sửa nguồn trong các công cụ phát triển của trình duyệt sẽ cung cấp mã sau:

detectPrivateMode: function (t) {
  var e;
  if (window.webkitRequestFileSystem) window.webkitRequestFileSystem(window.TEMPORARY, 1, function () {
    e = !1
  }, function (t) {
    console.log(t),
    e = !0
  });
   else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {
    var i;
    try {
      i = window.indexedDB.open('test')
    } catch (t) {
      e = !0
    }
    void 0 === e && n(function () {
      return 'done' === i.readyState
    }, function (t) {
      t || (e = !i.result)
    })
  } else if (r(window.navigator.userAgent)) {
    e = !1;
    try {
      window.indexedDB || (e = !0)
    } catch (t) {
      e = !0
    }
  } else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {
    if (window.safariIncognito) e = !0;
     else {
      try {
        window.openDatabase(null, null, null, null)
      } catch (t) {
        e = !0
      }
      try {
        window.localStorage.setItem('test', 1)
      } catch (t) {
        e = !0
      }
    }
    void 0 === e && (e = !1, window.localStorage.removeItem('test'))
  }
  n(function () {
    return void 0 !== e
  }, function (n) {
    t(e)
  })
}

Ví dụ, bạn có thể thấy họ đang cố gắng sử dụng window.webkitRequestFileSystem, Trong Firefox họ sẽ thử window.indexedDB.open('test'), trong Safary window.openDatabase, V.v. Tất cả các chức năng đó dường như dựa vào thực tế là chúng hoạt động khác nhau trong chế độ riêng tư (chế độ ẩn danh). Hầu hết các mã dường như sử dụng các chức năng liên quan đến lưu trữ cục bộ, dường như hoạt động khác với chế độ bình thường. Có một số khối bắt thử, vì vậy hầu hết các chức năng đó có thể thậm chí không khả dụng ở chế độ riêng tư. Nếu bạn google bất kỳ chức năng nào trong số đó (cũng có thể thêm "riêng tư" hoặc "ẩn danh" trong tìm kiếm), bạn sẽ tìm thấy rất nhiều kết quả thảo luận về các cách có thể để phát hiện chế độ riêng tư và cuối cùng, mã bạn sẽ tìm thấy rất giống với cái tôi đã trích dẫn Bạn sẽ tìm thấy một số câu hỏi trên StackExchange và mã đoạn GitHub. Ví dụ: câu trả lời này trên StackExchange có một số thông tin thú vị: https://stackoverflow.com/a/4132218

Trên New York Times, nếu bạn nhấp vào một bài viết, hãy mở nguồn HTML và tìm kiếm webkitRequestFileSystem, bạn sẽ tìm thấy mã tương tự.

Như bạn có thể thấy, có thể có một số khác biệt trong mã và các heuristic họ sử dụng, nhưng mọi trang web đều có khả năng phát hiện chế độ riêng tư bằng cách dựa vào cùng một bộ chức năng nhỏ.

6
reed

Rõ ràng có một số cách mà các trang web có thể phát hiện khi bạn ở chế độ Duyệt web riêng tư, đối với Safari trên máy tính để bàn và Safari di động .

Desktop Safari không yêu cầu favicon khi ở chế độ Duyệt web riêng tư, điều này mang lại mọi thứ. Nó cũng có sự khác biệt khác .

Mobile Safari không hỗ trợ lưu trữ cục bộ HTML5 khi ở chế độ Duyệt web riêng tư, cũng có thể được các trang web phát hiện.

3
D.W.

Kể từ tháng 3 năm 2020, dường như các trang web vẫn có thể phát hiện xem Firefox có chạy ở chế độ riêng tư hay không, dựa trên thực tế là IndexedDB không hoạt động khi Firefox chạy ở chế độ riêng tư. Có một số phương tiện truyền thông chính thống dường như đang sử dụng kỹ thuật này để chặn người dùng duyệt trang web của họ ở chế độ riêng tư hoặc buộc họ phải đăng nhập.

GitHub Gist với mã mẫu:
[.__.] https://Gist.github.com/jherax/a81c8c132d09cc354a0e2cb911841ff1

Bản demo làm việc của mã trên:
[.__.] https://output.jsbin.com/tazuwif

Chủ đề Bugzilla với nhiều thông tin hơn:
[.__.] https://ormszilla.mozilla.org/show_orms.cgi?id=781982
[.__.] https://ormszilla.mozilla.org/show_orms.cgi?id=150668

1
mti2935

Câu trả lời đơn giản là không có.

Đơn giản chỉ cần phát hiện rằng lịch sử không được lưu không có nghĩa là chế độ duyệt web riêng tư đang được sử dụng, nó đơn giản có nghĩa là lịch sử không được lưu, một thứ dễ dàng cấu hình trong bất kỳ trình duyệt nào.

Tại sao việc đăng nhập vào dịch vụ khác có nghĩa là bạn không sử dụng chế độ duyệt web riêng tư? Tôi thường sử dụng Facebook ở chế độ duyệt web riêng tư trên các máy tính của người khác, vì điều đó có nghĩa là tôi không phải đăng xuất chúng và đó là một cách dễ dàng để có phiên của riêng tôi mà không mất trạng thái.

Chế độ duyệt riêng tư chỉ đơn giản cho phép các tính năng mà bạn có thể tự cấu hình ở chế độ bình thường. Nó cho phép một số tính năng cùng một lúc trong một khoảng thời gian tạm thời để thuận tiện. Không có cách nào để biết ai đó đang sử dụng chế độ duyệt web riêng tư hay họ chỉ đơn giản là đã bật các tính năng đó.

0
Sonny Ordell