@webdecoy/fcaptcha 1.18.0 → 1.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/detection.js +29 -8
  2. package/package.json +1 -1
package/detection.js CHANGED
@@ -403,14 +403,35 @@ function checkJA3Fingerprint(ja3Hash) {
403
403
  // and passed via a trusted header the server is configured to accept.
404
404
  // Configure with: TRUSTED_JA4_HEADERS=cf-ja4,x-tls-ja4 (comma-separated).
405
405
 
406
- const KNOWN_BOT_JA4_HASHES = {
407
- // Populate with observed automation fingerprints in production.
408
- // JA4 format: t##d####_####..._####
409
- // Placeholders — administrators should add real fingerprints as they
410
- // are collected from deployed environments.
411
- // Example once identified:
412
- // 't13d1516h2_8daaf6152771_02713d6af862': 'Go default stdlib TLS'
413
- };
406
+ // Observed automation fingerprints. Ships EMPTY, deliberately.
407
+ //
408
+ // JA4 format: t##d####_<cipher hash>_<extension+sigalg hash>
409
+ //
410
+ // # The placeholder that used to live here was wrong
411
+ //
412
+ // It read:
413
+ //
414
+ // 't13d1516h2_8daaf6152771_02713d6af862': 'Go default stdlib TLS'
415
+ //
416
+ // That is the canonical example from the JA4 specification, and it is **Chrome**,
417
+ // not Go. Measured against a real TLS listener with server-go's ComputeJA4:
418
+ //
419
+ // Chromium 141 t13i1515h2_8daaf6152771_806a8c22fdea
420
+ // Go stdlib t13i131000_f57a46bbacb6_e5728521abd4
421
+ // curl t13i4906h2_0d8feac7bc37_7395dae3b2f3
422
+ // node https t13i521000_b262b3658495_8e6e362c5eac
423
+ // python urllib t13i171000_ab0a1bf427ad_8e6e362c5eac
424
+ //
425
+ // The middle section hashes the cipher list, i.e. the TLS stack itself.
426
+ // 8daaf6152771 is Chrome's; Go's is f57a46bbacb6. Had anyone uncommented that
427
+ // line, every Chrome visitor would have been scored as automation at 0.8/0.9.
428
+ //
429
+ // # Why it stays empty
430
+ //
431
+ // A static hash list is defeated by rotating a fingerprint, and these values
432
+ // drift with every browser release. Populate it only from abuse you actually saw
433
+ // on your own deployment, and record where each fingerprint came from.
434
+ const KNOWN_BOT_JA4_HASHES = {};
414
435
 
415
436
  function getTrustedJA4HeaderNames() {
416
437
  const env = process.env.TRUSTED_JA4_HEADERS;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webdecoy/fcaptcha",
3
- "version": "1.18.0",
3
+ "version": "1.19.1",
4
4
  "description": "Open source CAPTCHA with PoW, bot detection, and Vision AI protection",
5
5
  "main": "index.js",
6
6
  "exports": {