Discourse Fingerprint - Browser Fingerprinting Plugin

일반 포럼 회원들과 비교했을 때 기술적으로 능숙한 트롤들이 꽤 많다. 그중 일부는 끈질긴 바퀴벌레 같은 존재다.

1개의 좋아요

구글 크롬이 모질라 파이어폭스의 뒤를 이어갈 것 같습니다. 구글 크롬의 지문 추적(fingerprinting) 차단과 관련된 기사를 본 기억이 나는데, 지금은 찾을 수가 없습니다. 어쨌든 이는 다가올 변화의 신호입니다. 그렇다면 이것이 사실상 해당 플러그인의 종말을 의미하는 건가요?
https://9to5google.com/2021/03/03/google-chrome-third-party-cookies/
https://9to5google.com/2021/01/25/google-privacy-sandbox-2021-update/

4개의 좋아요

현재 최신 매치에 아무것도 표시되지 않습니다.

에러 로그에는 다음과 같은 내용이 표시됩니다:

plugins/discourse-fingerprint/app/serializers/flagged_fingerprint_serializer.rb:30:in `data'

plugins/discourse-fingerprint/app/serializers/flagged_fingerprint_serializer.rb:51:in `include_is_common?'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:375:in `include?'

(eval):9:in `_fast_attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:73:in `serializable_array'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:53:in `as_json'

app/controllers/application_controller.rb:493:in `serialize_data'

plugins/discourse-fingerprint/app/controllers/admin/fingerprint_controller.rb:25:in `index'

actionpack (6.1.3.2) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

actionpack (6.1.3.2) lib/abstract_controller/base.rb:228:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/rendering.rb:30:in `process_action'

actionpack (6.1.3.2) lib/abstract_controller/callbacks.rb:42:in `block in process_action'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:117:in `block in run_callbacks'

app/controllers/application_controller.rb:395:in `block in with_resolved_locale'

i18n (1.8.10) lib/i18n.rb:314:in `with_locale'

app/controllers/application_controller.rb:395:in `with_resolved_locale'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:126:in `block in run_callbacks'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:137:in `run_callbacks'

actionpack (6.1.3.2) lib/abstract_controller/callbacks.rb:41:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/rescue.rb:22:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'

activesupport (6.1.3.2) lib/active_support/notifications.rb:203:in `block in instrument'

activesupport (6.1.3.2) lib/active_support/notifications/instrumenter.rb:24:in `instrument'

activesupport (6.1.3.2) lib/active_support/notifications.rb:203:in `instrument'

actionpack (6.1.3.2) lib/action_controller/metal/instrumentation.rb:33:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'

activerecord (6.1.3.2) lib/active_record/railties/controller_runtime.rb:27:in `process_action'

actionpack (6.1.3.2) lib/abstract_controller/base.rb:165:in `process'

actionview (6.1.3.2) lib/action_view/rendering.rb:39:in `process'

rack-mini-profiler (2.3.2) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'

actionpack (6.1.3.2) lib/action_controller/metal.rb:190:in `dispatch'

actionpack (6.1.3.2) lib/action_controller/metal.rb:254:in `dispatch'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:33:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:50:in `block in serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:842:in `call'

railties (6.1.3.2) lib/rails/engine.rb:539:in `call'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `public_send'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `method_missing'

actionpack (6.1.3.2) lib/action_dispatch/routing/mapper.rb:20:in `block in <class:Constraints>'

actionpack (6.1.3.2) lib/action_dispatch/routing/mapper.rb:49:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:50:in `block in serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:842:in `call'

lib/middleware/omniauth_bypass_middleware.rb:71:in `call'

rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'

rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'

rack (2.2.3) lib/rack/head.rb:12:in `call'

actionpack (6.1.3.2) lib/action_dispatch/http/permissions_policy.rb:22:in `call'

lib/content_security_policy/middleware.rb:12:in `call'

lib/middleware/anonymous_cache.rb:355:in `call'

rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'

rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/cookies.rb:689:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:98:in `run_callbacks'

actionpack (6.1.3.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'

logster (2.9.6) lib/logster/middleware/reporter.rb:43:in `call'

railties (6.1.3.2) lib/rails/rack/logger.rb:37:in `call_app'

railties (6.1.3.2) lib/rails/rack/logger.rb:28:in `call'

config/initializers/100-quiet_logger.rb:23:in `call'

config/initializers/100-silence_logger.rb:31:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/request_id.rb:26:in `call'

lib/middleware/enforce_hostname.rb:23:in `call'

rack (2.2.3) lib/rack/method_override.rb:24:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/executor.rb:14:in `call'

rack (2.2.3) lib/rack/sendfile.rb:110:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'

rack-mini-profiler (2.3.2) lib/mini_profiler/profiler.rb:249:in `call'

message_bus (3.3.5) lib/message_bus/rack/middleware.rb:61:in `call'

lib/middleware/request_tracker.rb:177:in `call'

railties (6.1.3.2) lib/rails/engine.rb:539:in `call'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `public_send'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `method_missing'

rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'

rack (2.2.3) lib/rack/urlmap.rb:58:in `each'

rack (2.2.3) lib/rack/urlmap.rb:58:in `call'

unicorn (6.0.0) lib/unicorn/http_server.rb:634:in `process_client'

unicorn (6.0.0) lib/unicorn/http_server.rb:732:in `worker_loop'

unicorn (6.0.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'

unicorn (6.0.0) lib/unicorn/http_server.rb:143:in `start'

unicorn (6.0.0) bin/unicorn:128:in `<top (required)>'

vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'

vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

2.8.0.beta1로 업데이트됨

에러 로그에 이 에러가 계속 표시되고 있으며 플러그인 페이지에는 아무것도 표시되지 않습니다.

plugins/discourse-fingerprint/app/serializers/flagged_fingerprint_serializer.rb:30:in `data'

plugins/discourse-fingerprint/app/serializers/flagged_fingerprint_serializer.rb:51:in `include_is_common?'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:375:in `include?'

(eval):9:in `_fast_attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:73:in `serializable_array'

active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:53:in `as_json'

app/controllers/application_controller.rb:493:in `serialize_data'

plugins/discourse-fingerprint/app/controllers/admin/fingerprint_controller.rb:25:in `index'

actionpack (6.1.3.2) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

actionpack (6.1.3.2) lib/abstract_controller/base.rb:228:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/rendering.rb:30:in `process_action'

actionpack (6.1.3.2) lib/abstract_controller/callbacks.rb:42:in `block in process_action'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:117:in `block in run_callbacks'

app/controllers/application_controller.rb:395:in `block in with_resolved_locale'

i18n (1.8.10) lib/i18n.rb:314:in `with_locale'

app/controllers/application_controller.rb:395:in `with_resolved_locale'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:126:in `block in run_callbacks'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:137:in `run_callbacks'

actionpack (6.1.3.2) lib/abstract_controller/callbacks.rb:41:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/rescue.rb:22:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'

activesupport (6.1.3.2) lib/active_support/notifications.rb:203:in `block in instrument'

activesupport (6.1.3.2) lib/active_support/notifications/instrumenter.rb:24:in `instrument'

activesupport (6.1.3.2) lib/active_support/notifications.rb:203:in `instrument'

actionpack (6.1.3.2) lib/action_controller/metal/instrumentation.rb:33:in `process_action'

actionpack (6.1.3.2) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'

activerecord (6.1.3.2) lib/active_record/railties/controller_runtime.rb:27:in `process_action'

actionpack (6.1.3.2) lib/abstract_controller/base.rb:165:in `process'

actionview (6.1.3.2) lib/action_view/rendering.rb:39:in `process'

rack-mini-profiler (2.3.2) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'

actionpack (6.1.3.2) lib/action_controller/metal.rb:190:in `dispatch'

actionpack (6.1.3.2) lib/action_controller/metal.rb:254:in `dispatch'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:33:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:50:in `block in serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:842:in `call'

railties (6.1.3.2) lib/rails/engine.rb:539:in `call'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `public_send'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `method_missing'

actionpack (6.1.3.2) lib/action_dispatch/routing/mapper.rb:20:in `block in <class:Constraints>'

actionpack (6.1.3.2) lib/action_dispatch/routing/mapper.rb:49:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:50:in `block in serve'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:842:in `call'

lib/middleware/omniauth_bypass_middleware.rb:71:in `call'

rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'

rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'

rack (2.2.3) lib/rack/head.rb:12:in `call'

actionpack (6.1.3.2) lib/action_dispatch/http/permissions_policy.rb:22:in `call'

lib/content_security_policy/middleware.rb:12:in `call'

lib/middleware/anonymous_cache.rb:355:in `call'

rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'

rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/cookies.rb:689:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'

activesupport (6.1.3.2) lib/active_support/callbacks.rb:98:in `run_callbacks'

actionpack (6.1.3.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'

logster (2.9.6) lib/logster/middleware/reporter.rb:43:in `call'

railties (6.1.3.2) lib/rails/rack/logger.rb:37:in `call_app'

railties (6.1.3.2) lib/rails/rack/logger.rb:28:in `call'

config/initializers/100-quiet_logger.rb:23:in `call'

config/initializers/100-silence_logger.rb:31:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/request_id.rb:26:in `call'

lib/middleware/enforce_hostname.rb:23:in `call'

rack (2.2.3) lib/rack/method_override.rb:24:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/executor.rb:14:in `call'

rack (2.2.3) lib/rack/sendfile.rb:110:in `call'

actionpack (6.1.3.2) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'

rack-mini-profiler (2.3.2) lib/mini_profiler/profiler.rb:249:in `call'

message_bus (3.3.5) lib/message_bus/rack/middleware.rb:61:in `call'

lib/middleware/request_tracker.rb:177:in `call'

railties (6.1.3.2) lib/rails/engine.rb:539:in `call'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `public_send'

railties (6.1.3.2) lib/rails/railtie.rb:207:in `method_missing'

rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'

rack (2.2.3) lib/rack/urlmap.rb:58:in `each'

rack (2.2.3) lib/rack/urlmap.rb:58:in `call'

unicorn (6.0.0) lib/unicorn/http_server.rb:634:in `process_client'

unicorn (6.0.0) lib/unicorn/http_server.rb:732:in `worker_loop'

unicorn (6.0.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'

unicorn (6.0.0) lib/unicorn/http_server.rb:143:in `start'

unicorn (6.0.0) bin/unicorn:128:in `<top (required)>'

vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'

vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

이건 @sam 이 좀 손을 봐서 최신 상태로 맞춰줘야 할 것 같아. 일단 깨진 것으로 표시할까?

개인적으로 이 기능이 하려는 일이 너무 어렵기 때문에 반쯤 비추천 상태라고 생각해. @dan, 너는 어떻게 생각해?

5개의 좋아요

제 것이 이제 제대로 작동하는 건지, 아니면 무언가를 놓치고 있는 건지 모르겠습니다. 충돌이 없어도 지문이 표시되지 않나요?

(또한 "유사한 서명이 찾지되었습니다."라는 문구가 어색하게 읽힙니다.)

결과 없음

약 일주일 전에 설정을 했습니다.

제가 이 기능의 작동 방식을 잘못 이해하고 있는 건가요, 아니면 무언가를 처리해야 하나요?

혹시 아시는 분 계신가요?

1개의 좋아요

2.7.4에서 작동하지 않습니다. 2주 넘게 매일 확인해 왔는데, 매번 동일한 사용자 목록이 표시됩니다.

1개의 좋아요

이것은 쐐기입니다.
https://9to5mac.com/2021/07/08/advertisers-concerned-icloud-private-relay-could-put-an-end-to-fingerprinting/

3개의 좋아요

같은 문제입니다.

2.8.0.beta2에서도 작동하지 않습니다. 이 플러그인에서 확인했을 때, 5월 26일에 해당 사용자를 본 것으로 표시되고 있습니다.

나만 그런 줄 알았네요.

1개의 좋아요

Fingerprintjs2 스크립트를 최신 버전으로 업데이트한 후 로드되지 않았습니다. 수정 사항을 적용했으니 이제 정상적으로 작동할 것입니다. 불편을 드려 죄송합니다!

과거에도 관에 못을 박는 일이 많았고, 여전히 브라우저를 지문화(fingerprinting)하는 방법들이 존재합니다. 링크하신 기사를 빠르게 훑어본 결과, 이는 사용자의 IP를 숨기는 방식일 뿐이며, 불행히도 이는 여전히 지문화가 가능하다는 것을 의미합니다 (IP보다는 브라우저의 특성에 더 크게 의존하기 때문이죠).

5개의 좋아요

권한 활성화 설정을 놓친 건가요?

제 경우에는 아직까지 작동하지 않았습니다

도움 주셔서 감사합니다

플러그인을 서버 측 정보만으로도 작동하도록 재사용하는 방법이 있습니다.

저는 https://meta.discourse.org/t/discourse-check-the-user-ip-for-block-list-only-on-login/16599에서 이 플러그인을 추천받았습니다. Discourse는 사용자의 IP에 대해 크게 신경 쓰지 않으며, 기본적으로 IP로 사용자를 차단하지 않습니다(수동으로 설정해야 합니다). 또한, 차단된 계정과 동일한 IP를 가진 새로운 사용자는 우연히 발견할 수밖에 없습니다. 지문(Fingerprinting) 플러그인도 IP를 확인하지 않기 때문에 큰 도움이 되지 않았습니다.

차단된 계정과 IP가 일치하는 사용자를 보여줄 개요 페이지가 있으면 유용할 것입니다.

또한 https://ip-api.com/과 같은 서비스를 통해 IP가 프록시/VPN인지 확인할 수 있으며, 이것도 유용한 도구가 될 수 있습니다.

IP 외에도 Discourse에는 사용자 이메일 주소도 있습니다. 임시 이메일 서비스를 통해 가입한 트롤(악성 사용자)을 자주 보는데, 이것도 악성 사용자를 식별하는 지표가 될 수 있습니다.

어쨌든, 지문 식별(fingerprinting)은 요즘 점점 더 어려워지고 있습니다. 프라이버시를 중시하는 기업과 개인들이 늘어나고 있기 때문에, 이 기술이 앞으로 오랫동안 가능할 것이라고는 상상하기 어렵습니다.

수정해 주셔서 감사합니다. 이제 잘 작동합니다. :partying_face:

안녕하세요, 확인 부탁드립니다. 관리자가 각 사용자의 모든 20개 특성을 볼 수 있나요? 아니면 단순히 섞인 이해할 수 없는 지문 번호만 볼 수 있나요?

이 플러그인을 (선택적으로) 모더레이터에게도 사용할 수 있게 해주는 PR이 환영될까요?

6개의 좋아요

이 플러그인에 대해 Ember 비추천(deprecation) 경고를 보고 있습니다. 최신 버전(2.0)을 사용 중인 것 같습니다. Ember5 Day 전에 수정될 것인가요?

deprecate-shim.js:33 DEPRECATION: [PLUGIN discourse-fingerprint-d4cc6751d9767c7e2e47d32cf0625d104e932618df8bdc6b57c6c1fb69c667ac] Ember Global의 사용은 비추천됩니다. Ember 모듈 또는 특정 API를 가져오도록 해야 합니다. [deprecation id: ember-global] 자세한 내용은 Ember.js - Deprecations 를 참조하세요.
(anonymous) @ deprecate-shim.js:33

1개의 좋아요

안녕하세요,

이 문제가 전체 discourse 업데이트 때문인지는 정확히 알 수 없습니다. 하지만 원래 같은 IP 주소를 사용하는 사용자를 자동으로 찾아주는 기능이 의도대로 작동했었습니다. 그런데 지금은 해당 부분이 비어 있어서 사용자를 수동으로 검색해야 합니다. 소비자 수가 8,000명이 넘는 상황에서 이는 매우 불편합니다.

이 문제를 확인해 주시거나, 고장 난 기능으로 분류되는 것인지 알려 주실 수 있을까요?

이 플러그인이 소켓 꼭두각시를 식별하는 데 작동하는지에도 관심이 있습니다.

1개의 좋아요

플러그인을 말씀하시는 건지, Discourse 관리자 기능을 말씀하시는 건지 궁금합니다. 현재 3.1.4 버전을 사용 중인데, Discourse의 IP 조회 도구를 통해 동일한 IP 주소를 사용하는 멤버들을 계속 확인할 수 있습니다. 말씀하신 수동 검색이 바로 이것을 의미하는 건가요?

더 궁금한 점은 이 플러그인이 3.1 버전에서도 여전히 작동하는지 여부입니다.