Client Fingerprinting via Analysis of Browser Scripting Environment
Mozilla Firefox has the navigator.language property which provides information about the browser’s language. The format of this field is always a 2 character lower case language code, and if a country is specified, it will be in uppercase separated by a hyphen (-) character.
Mozilla Firefox provides some basic information about the O/S through the navigator.oscpu, navigator.platform, navigator.vendor and navigator.vendorSub properties. The navigator.oscpu properties provides more detailed information about the O/S that the navigator.platform. As an example, Firefox running on Windows XP will return ‘Windows NT 5.1’ for navigator.oscpu and ‘Win32’ for navigator.platform. Some GNU/Linux distributions have modified navigator.vendor and navigator.vendorSub to return specific information about the browser and O/S; the default binaries from the Mozilla Foundation’s website return an empty string (instead of being an undefined property). As an example, the version of Firefox provided by the Fedora Project will return ‘Fedora’ for navigator.vendor and ‘3.6.2-1.fc13’ for navigator.vendorSub while the version of Firefox provided by Ubuntu 10.04 will return ‘Ubuntu’ for navigator.vendor and ’10.04’ for navigator.vendorSub.
Mozilla Firefox browser has the potential to provide extensive information about the version of the browser based upon the navigator.buildID and navigator.productSub. The navigator.buildID represents when the date/time of browser is complied, with Firefox 2.0.0.x using the YYYYMMDDHH format, and Firefox 3+ using the YYYYMMDDHHMMSS format. It appears that Firefox is built from source sequentially so the build times between the three major O/S families can be identified. Also, if a GNU/Linux distribution takes the source code and complies it, the time at which the source is compiled is unlikely to match that of the Mozilla foundation (and will vary between the various GNU/Linux distributions) allowing for the distribution to be identified. As the distributions compile different versions for the 32-bit and 64-bit versions of the distribution, there can be differences which allow the architecture to be identified. The navigator.productSub property is similar to the navigator.buildID