Created
February 6, 2026 02:31
-
-
Save thyngster/f1a9db70012e6ded2a7d00c2b0b6e387 to your computer and use it in GitHub Desktop.
dataLayer Integrity Monitor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function protectDataLayer() { | |
| window._internalDataLayer = window.dataLayer || []; | |
| // Wrap the array in a Proxy to detect internal changes | |
| const dataLayerProxy = new Proxy(window._internalDataLayer, { | |
| set(target, prop, value, receiver) { | |
| console.log(`[dataLayer] Change detected: "${prop}" set to`, value); | |
| return Reflect.set(target, prop, value, receiver); | |
| }, | |
| get(target, prop, receiver) { | |
| const value = Reflect.get(target, prop, receiver); | |
| // Detect mutating methods like push, pop, splice, etc. | |
| if (typeof value === 'function' && ['pop','shift','unshift','splice','sort','reverse'].includes(prop)) { | |
| return function (...args) { | |
| console.log(`[dataLayer] Method "${prop}" called with`, args); | |
| return value.apply(target, args); | |
| }; | |
| } | |
| return value; | |
| } | |
| }); | |
| // 3️⃣ Protect the variable itself from being overwritten | |
| Object.defineProperty(window, 'dataLayer', { | |
| configurable: true, | |
| enumerable: true, | |
| get() { | |
| return dataLayerProxy; | |
| }, | |
| set(newValue) { | |
| console.log('[dataLayer] Attempt to overwrite/reinitialize detected!', newValue); | |
| console.log('Stack trace:\n', new Error().stack); | |
| } | |
| }); | |
| console.log('✅ dataLayer monitoring active'); | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment