diff --git a/src/lib/__tests__/detect.test.ts b/src/lib/__tests__/detect.test.ts index 0ee345726..1cb558ad8 100644 --- a/src/lib/__tests__/detect.test.ts +++ b/src/lib/__tests__/detect.test.ts @@ -2,7 +2,6 @@ import * as detect from '../detect'; import { expect } from '@jest/globals'; const IP = '127.0.0.1'; -const BAD_IP = '127.127.127.127'; test('getIpAddress: Custom header', () => { process.env.CLIENT_IP_HEADER = 'x-custom-ip-header'; @@ -18,12 +17,6 @@ test('getIpAddress: Standard header', () => { expect(detect.getIpAddress(new Headers({ 'x-forwarded-for': IP }))).toEqual(IP); }); -test('getIpAddress: CloudFlare header is lower priority than standard header', () => { - expect( - detect.getIpAddress(new Headers({ 'cf-connecting-ip': BAD_IP, 'x-forwarded-for': IP })), - ).toEqual(IP); -}); - test('getIpAddress: No header', () => { expect(detect.getIpAddress(new Headers())).toEqual(null); }); diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 6192f3423..2718c135c 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -333,21 +333,17 @@ export const BROWSERS = { yandexbrowser: 'Yandex', }; -// The order here is important and influences how IPs are detected by lib/detect.ts -// Please do not change the order unless you know exactly what you're doing - read https://developers.cloudflare.com/fundamentals/reference/http-headers/ export const IP_ADDRESS_HEADERS = [ - 'x-client-ip', - 'x-forwarded-for', - 'cf-connecting-ip', // This should be *after* x-forwarded-for, so that x-forwarded-for is respected if present + 'cf-connecting-ip', 'do-connecting-ip', 'fastly-client-ip', + 'forwarded', 'true-client-ip', - 'x-real-ip', + 'x-appengine-user-ip', + 'x-client-ip', 'x-cluster-client-ip', 'x-forwarded', - 'forwarded', - 'x-appengine-user-ip', - 'x-nf-client-connection-ip', + 'x-forwarded-for', 'x-real-ip', ]; diff --git a/src/tracker/index.js b/src/tracker/index.js index b05d90859..76d29a1dd 100644 --- a/src/tracker/index.js +++ b/src/tracker/index.js @@ -38,18 +38,6 @@ /* Helper functions */ - const normalize = raw => { - if (!raw) return raw; - try { - const u = new URL(raw, location.href); - if (excludeSearch) u.search = ''; - if (excludeHash) u.hash = ''; - return u.toString(); - } catch (e) { - return raw; - } - }; - const getPayload = () => ({ website, screen, @@ -73,7 +61,11 @@ if (!url) return; currentRef = currentUrl; - currentUrl = normalize(new URL(url, location.href).toString()); + currentUrl = new URL(url, location.href); + + if (excludeSearch) currentUrl.search = ''; + if (excludeHash) currentUrl.hash = ''; + currentUrl = currentUrl.toString(); if (currentUrl !== currentRef) { setTimeout(track, delayDuration); @@ -218,9 +210,8 @@ }; } - let currentUrl = normalize(href); - let currentRef = normalize(referrer.startsWith(origin) ? '' : referrer); - + let currentUrl = href; + let currentRef = referrer.startsWith(origin) ? '' : referrer; let initialized = false; let disabled = false; let cache;