browser-shield.user.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // ==UserScript==
  2. // @name BrowserShield: Anti fingerprinters
  3. // @author nokoru (aka satoi)
  4. // @homepageURL https://notabug.org/nokoru/browser-shield
  5. // @date 2019-09-26
  6. // @version 1.1.6
  7. // @updateURL https://notabug.org/nokoru/browser-shield/raw/master/browser-shield.user.js
  8. // @description This script fakes some browser data to enhance your privacy.
  9. // @namespace browserShield
  10. // @include *
  11. // @run-at document-start
  12. // @copyright 2019+, nokoru (https://nokoru.neocities.org/)
  13. // @license unlicense; https://notabug.org/nokoru/browser-shield/raw/master/license.txt
  14. // ==/UserScript==
  15. //experimental: script priority trick taken from https://stackoverflow.com/questions/4978736/how-to-run-greasemonkey-script-before-the-page-content-is-displayed, credit to Jonas Äppelgran! thank you! :3
  16. //"priority" trick is supposed to load this script before any other, so nothing can read navigator object before BrowserShield.
  17. var bsStart = (new Date()).getTime();
  18. var bsInterval = setInterval(browserShield, 50);
  19. //BrowserShield function
  20. function browserShield() {
  21. //stop executing this function either when page is ready or 20 seconds have past since bsInterval started.
  22. if (document.readyState == "complete" || (new Date()).getTime() - bsStart >= 20000) {
  23. clearInterval(bsInterval);
  24. return;
  25. }
  26. /* BrowserShield's anti-fingerprinting default settings:
  27. * Default browser: Google Chrome
  28. * Default OS: Windows 10
  29. * Default number of cores: randomized every time a page is reloaded
  30. * Default browser's language: English ("en-US")
  31. * Default screen resolution: 1366x768
  32. */
  33. //** SPOOF SCREEN PROPERTIES AND DIMENSIONS **
  34. /* Spoof screen propierties.
  35. * Most popular dimensions: (1) 1366x768 and (2) 1920x1080
  36. */
  37. screen = {
  38. width: 1366,
  39. height: 768,
  40. availWidth: 1366,
  41. availHeight: 768,
  42. colorDepth: 24,
  43. pixelDepth: 24,
  44. };
  45. //*** SPOOF BROWSER PROPERTIES ***
  46. /* Spoof browser's language (you can change this by modifying the "return <language>;"
  47. * If you aren't an english speaker, you can change this preference, however, keep in mind that revealing websites your native language can be a used as a method to track you.
  48. * Browser languages are defined by the ISO 639-1 codes (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). Aditionally, SOME languages support country codes defined by the ISO 3166-1 alpha-2 codes (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
  49. * Example: es-AR (Argentinian Spanish).
  50. */
  51. Object.defineProperty(navigator,"language", {
  52. get: function () { return "en-US"; },
  53. set: function (a) {},
  54. configurable: false
  55. });
  56. /* User agent switcher (DOES NOT SPOOF THE HTTP HEADER, YET!)
  57. * Be careful! User agents are very specific strings. List of most popular user agents: http://www.browser-info.net/useragents
  58. */
  59. Object.defineProperty(navigator, "userAgent", {
  60. get: function(){ return "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"; },
  61. set: function(a) {},
  62. configurable: false
  63. });
  64. /* Vendor injector
  65. * Either "Google Inc." (in Chrome), "Apple Computer, Inc.", or (in Firefox) the empty string.
  66. */
  67. Object.defineProperty(navigator,"vendor", {
  68. get: function () { return "Google Inc."; },
  69. set: function (a) {},
  70. configurable: false
  71. });
  72. /* App version injector
  73. */
  74. Object.defineProperty(navigator,"appVersion", {
  75. get: function () { return "5.0 (Windows)"; },
  76. set: function (a) {},
  77. configurable: false
  78. });
  79. //** SPOOF DOCUMENT PROPERTIES **
  80. /* Clear referrer string, I recommend leave it blank. (DOES NOT SPOOF THE HTTP HEADER, YET!)
  81. * document.referrer is typically used to get your previously visited page.
  82. */
  83. Object.defineProperty(document, "referrer", {
  84. get: function(){ return ""; },
  85. set: function(a) {},
  86. configurable: false
  87. });
  88. //** SPOOF OS/COMPUTER PROPERTIES **
  89. /* Spoof platform (OS)
  90. * Used to get your computer's operating system.
  91. */
  92. Object.defineProperty(navigator,"platform", {
  93. get: function () { return "Win32"; },
  94. set: function (a) {},
  95. configurable: false
  96. });
  97. /* Spoof oscpu
  98. * Only Firefox supports this property, any other browser will return "undefined".
  99. * https://developer.mozilla.org/en-US/docs/Web/API/Navigator/oscpu
  100. */
  101. Object.defineProperty(navigator,"oscpu", {
  102. get: function () { return undefined; },
  103. set: function (a) {},
  104. configurable: false
  105. });
  106. /* Spoof hardwareConcurrency (CPU cores)
  107. * hardware concurrency = number of CPU cores (by default, this information is randomized every time a page is reloaded)
  108. */
  109. var cores = [2,4,8];
  110. Object.defineProperty(navigator,"hardwareConcurrency", {
  111. get: function () { return cores[Math.floor(Math.random() * cores.length)]; },
  112. set: function (a) {},
  113. configurable: false
  114. });
  115. };