Closed simonbesters closed 9 months ago
Ik wilde voor Laravel:
...
laravel_session
confidence 100 zoals nu, en ook^\w+_session$
confidence 50 +XSRF-TOKEN
confidence 50.
Maar dat kan dus ook niet. De meeste Laravel apps hebben een APP_NAME en dan heet de cookies niet meer laravel_session
.
Wappalyzer is zo raar/strict/efficient? gemaakt dat het niet uit te breiden is, en ook niet makkelijk/overzichtelijk patchbaar.
Dit is natuurlijk voor niemand leuk om uit te pluizen:
const detections = technologies
.map((technology) =>
Object.keys(relations)
.map(
(type) =>
items[type] && relations[type](technology, type, items[type])
)
.flat()
)
.flat()
.filter((technology) => technology)
Dat had gewoon met een paar forEach
gekund, mja, dat is te makkelijk. En nog steeds niet uitbreidbaar genoeg. Het moeten losse classes worden per detection type (cookies/meta/dom/scriptSrc
etc), maar dat is een totale overhaul van de hele wappa code.
Briljante hack door @simonbesters: niet "cookies"
controleren, maar Set-Cookie
header:
"headers": {
"Set-Cookie": "\\w+_session=\\;confidence:50"
},
Ik had zin om even iets anders te doen vanavond.
Ik heb naast cookies
een nieuwe pattern/technology toegevoegd: cookieNames
.
Als je deze in de json opneemt kan je regex gebruiken op de cookienaam, zonder dat de originele cookie opzet op zijn kop wordt gezet:
"cookieNames": [
"^[\\w-]+_(?:[\\w-]+_)*guid$",
"^\\w+_session$"
],
Dan kan die gekke Google Analytics strippen er ook uit:
// Change Google Analytics 4 cookie from _ga_XXXXXXXXXX to _ga_*
Object.keys(cookies).forEach((name) => {
if (/_ga_[A-Z0-9]+/.test(name)) {
cookies['_ga_*'] = cookies[name]
delete cookies[name]
}
})
Fuk yea! Ik dacht ff diff bekijken, maar Github wil alleen maar vergelijken met de originele repo van tienduizend jaar geleden π
Github Virtual Assistent!! https://stackoverflow.com/questions/38831301/how-to-un-fork-the-github-repository/66470086#66470086
https://github.com/dipnl/wappalyzer/compare/npm...cookieNames
Hoe heb je de lokale dev ingericht? Zelf symlink? npm link? node_modules bewerken?
Wappalyzer git in PhpStorm geopend, npm install en daar de js-files (niet in node_modules) bewerkt.
Testen met node cli.js 'https://www.apeldoorn.nl' --pretty -d -e
.
Alleen nog niet de custom-tech gekoppeld, maar dat is niet per se nodig.
Github Virtual Assistent!! https://stackoverflow.com/questions/38831301/how-to-un-fork-the-github-repository/66470086#66470086
Dat durf ik denk niet te doen.
Alleen nog niet de custom-tech gekoppeld, maar dat is niet per se nodig.
Dat is heel makkelijk. Gewoon een symlink maken in de wappalyzer code dir naar de custom tech die je wil gebruiken. In mijn geval:
ln -sf ../../wappalyzer-technologies/prod.json wappalyzer-custom-technologies.json
ln -sf ../../wappalyzer-technologies/categories.json wappalyzer-custom-categories.json
Want de code staat in /var/www/composer/wappalyzer/
en de custom techs in /var/www/wappalyzer-technologies/
. Ik neem aan dat je in DIP zelf ook symlinks gebruikt naar de custom techs repo die ergens staat, dus hierin hetzelfde.
Gaan we nou techs in de wappalyzer code repo aanpassen, of alleen in onze custom techs? Dubieus. We hebben al een hoop overschreven in de custom techs dus "nieuwe in custom, bestaande overschrijven in code" gaat ook niet meer op.
Die "gekke Google Analytics strippen" veranderen we natuurlijk wel in de tech in de code repo. Maar SmartSite
?
Voor wip/prod wanneer dit erin zit:
"Laravel": {
"example": "2024-02-14 https://www.jeugdtegoed.nl https://icares.com/",
"cats": [18],
"cookies": {
"XSRF-TOKEN": "\\;confidence:50"
},
"cookieNames": [
"^laravel_session(_\\w+)?",
"\\w_session$\\;confidence:50"
],
"cpe": "cpe:2.3:a:laravel:laravel:*:*:*:*:*:*:*:*",
"description": "Laravel is a free, open-source PHP web framework.",
"icon": "Laravel.svg",
"implies": "PHP",
"js": {
"Laravel": ""
},
"oss": true,
"website": "https://laravel.com"
},
Elbert π
;({
options: this.options,
browser: this.browser,
init: this.initDriver,
} = driver)
Probeert ie het expres zo onleesbaar mogelijk te maken?? Dat kan 10 x zo leesbaar in maar 3 ipv 5 regels! Wat een poepert. Maar dat komt wel ooit. Eerst uitvogelen hoe z'n browser instance werkt.
Omg ik ben me al een half uur aan het afvragen waarom cookieNames
in Google Analytics
niet werkt, maar scriptSrc
etc wel. Hij zou zelfs de _ga
van cookies
moeten gebruiken!, daar hebben we niks in veranderd!
Maar wij hebben Google Analytics
overschreven in onze custom techs, en die had ik net gesymlinkt π Fuck me.
Ik ben nu tevreden.
page
gemaakt wordt, zodat cookies van alle paginas gebruikt worden (ook al doen wij altijd maar 1 pagina, geen --recursive
oid)cookies
en cookieNames
vullen ipv Elbert's rare object reduce π€¦cookieNames
gebruiken _ β LET OP β dit moeten we dadelijk ook doen in onze overschreven custom GA tech.Maar wel fucking goed bezig yo πͺ Dit was een belangrijke missing feature. Nou hebben we de Cookies check echt niet meer nodig voor analytics, nadat we allerlei wappa techs bijwerken met cookieNames
natuurlijk.
Gaan we nou techs in de wappalyzer code repo aanpassen, of alleen in onze custom techs? Dubieus.
Ja, nou het was alleen bedoeld als voorbeeldje. Volgens mij werkt het wip/prod wappa proces meer dan prima.
Dus die s.json change mag komen te vervallen.
Dit was een belangrijke missing feature.
En ik kan eindelijk de laatste 3 'geen/onbekend' wegwerken: 3x Smartsite via cookieNames...
Ik had het bijna online gezet, maar ik wil het toch nog iets beter testen. De nieuwe manier van cookies ophalen is significant anders, dus dat moet nog wel werken overal in alle rare sites die in DIP staan, niet alleen de 10 fijne test sites die we hebben getest tijdens dev. Die MS logins moeten ook nog 'werken' (iig niet kapot zijn), en de superlangzame sites waar LH faalt ook, en de sites waar de Cookies checker heel veel of geen cookies vindt, etc.
cookieNames
moet ook nog in de README. Laten we het package onderhouden alsof het een echt npm package is. Misschien wordt DIP wel de nieuwe maintainer. Screw you Elbert!
Gevonden GA door Wappa (in de WhatCMS checker): https://app.digitalinsightsplatform.nl/custom-queries/166 Heel vaak zonder versie...
En heel vaak UA
. Gegroepeerd op versie: https://app.digitalinsightsplatform.nl/custom-queries/167
En heel vaak
UA
. Gegroepeerd op versie: https://app.digitalinsightsplatform.nl/custom-queries/167
Er zijn zo gruwelijk veel onbeheerde websites. Het is een drama.
Bijv bij deze krijg ik nu lokaal een ander resultaat dan Prod: https://app.digitalinsightsplatform.nl/checks/1660039 / https://onderwijsinnovatie.avans.nl/ Prod zegt GA4 (met welke reden slaan we niet op (CLI -e
)), maar ik lokaal match alleen op "js" en "scriptSrc" en dan is de versie null
. Gevonden cookies:
log | driver | [
'JSESSIONID',
'BACKEND',
'__utma',
'__utmc',
'__utmz',
'__utmt',
'__utmb'
]
Komt dat door ons, of onbetrouwbare/onvoorspelbare site? Ik durf hiermee nog niet naar Prod. Doe jij nog wat testjes om Prod-pre-cookieNames te vergelijken met lokaal-met-cookieNames?
Is cookieNames
trouwens wel goed genoeg? Willen we nooit cookie name regex vinden EN cookie value vergelijken? Dat kan nu niet. cookies
kan iets met de value doen, en cookieNames
kan de name regexen, maar geen combinatie. Misschien willen we dat nooit, prima, maar als we dat wel OOIT SOMS EVER willen kunnen, moeten we m nu eerst beter maken, voordat we deployen.
Willen we nooit cookie name regex vinden EN cookie value vergelijken?
Nah. In heel wappa wordt het maar HEEL weinig gebruikt, en dan is de cookie name meestal al specifiek genoeg, dus had ie de value niet eens hoeven gebruiken. Basta.
Voor https://app.digitalinsightsplatform.nl/checks/1662231 / https://leiden.lokalelastenmeter.nl/ krijg ik lokaal UA
EN GA4
, en in dit geval wint GA4
dan, maar dat is geen goed teken. Hoe kan een website allebei hebben? Of laden ze gewoon echt allebei......? π€¦
https://app.digitalinsightsplatform.nl/checks/1657931 / https://waalwijk.incijfers.nl/Dashboard ook beide versies
https://app.digitalinsightsplatform.nl/checks/1658111 / https://lelystad.incijfers.nl/dashboard/ ook... Kleine steekproef, veel van zulke. Werkt GA4 altijd zo? Als GA4 aan staat, vindt Wappa ook UA
? Of staat ie bij veel websites allebei aan =(
Ik duik er morgen even in.
Bijv bij deze krijg ik nu lokaal een ander resultaat dan Prod: https://app.digitalinsightsplatform.nl/checks/1660039 / https://onderwijsinnovatie.avans.nl/ Prod zegt GA4 (met welke reden slaan we niet op (CLI
-e
)), maar ik lokaal match alleen op "js" en "scriptSrc" en dan is de versienull
.
Alleen op testworker
vindt ie wel GA4. Lokaal en op test3worker
vindt ie deze niet:
{
"type": "cookies",
"regex": "(?:)",
"value": "GS1.1.1707765598.1.0.1707765604.0.0.0",
"match": "",
"confidence": 100,
"version": "GA4",
"implies": [],
"excludes": []
},
Lokaal met oude en nieuwe code is wel consistent (maar zonder GA4). In m'n echte browser (normaal en incognito) vindt ie ook geen GA4 cookie. Weird.
Een rare:
https://socialebasis.kampen.nl/sociale-basis/cover
In JS-bestanden vind je wat gtag
sporen, maar er wordt geen verbinding met Google Analytics servers gemaakt (dat ik kan zien).
dip prod zegt er zit Google Analytics in: https://app.digitalinsightsplatform.nl/checks/1687322
Lokaal met cli (huidige en nieuwe) vindt hij niets.
Dit lijstje heb ik getest. Hadden op prod met wappa allemaal Google Analytics:
Alleen bij https://socialebasis.kampen.nl/sociale-basis/cover wordt het met de nieuwe wappa niet gevonden. Maar lijkt een andere oorzaak te hebben.
https://onderwijsinnovatie.avans.nl/ Lokaal met oude en nieuwe code is wel consistent (maar zonder GA4). In m'n echte browser (normaal en incognito) vindt ie ook geen GA4 cookie. Weird.
Dit is geen GA4, maar GA2 (ja nog voor UA). Dat zie je aan de cookies: __utma/b/c/z/t
en aan de request naar https://ssl.google-analytics.com/ga.js
.
Ik heb in deze wappa_tech commit de versie herkenning verbeterd. Bron die ik o.a. heb gebruikt is: https://onward.justia.com/history-of-google-analytics/
Maar ik heb eerder die aggressieve cookies weggooien
juist gebruikt omdat ik bang was dat er nog kruimels van cookies achterbleven.
Ik krijg op prod nu weer geen versie, wat klopt, omdat prod nog geen GA2-versie kan herkennen.:
https://app.digitalinsightsplatform.nl/checks/1657931 / https://waalwijk.incijfers.nl/Dashboard ook beide versies https://app.digitalinsightsplatform.nl/checks/1658111 / https://lelystad.incijfers.nl/dashboard/ https://app.digitalinsightsplatform.nl/checks/1662231 / https://leiden.lokalelastenmeter.nl/
Hier draaien zowel UA als GA4 (handmatige controle in de browser en met de nieuwe wappa_tech (met verbeterde versie herkenner).
https://www.jonginvijfheerenlanden.nl/ https://app.digitalinsightsplatform.nl/checks/1687512
Hier draait zelfs GA2 Γ©n GA4 naast elkaar. Op prod zichtbaar bij cookies (_utm*
):
https://app.digitalinsightsplatform.nl/checks/1687511
Met cookieNames vinden we netjes beide versies. Wappa toont alleen GA4 (waarschijnlijk omdat hij die als eerste tegen kwam).
Wat is het internet toch een puinhoop he.
Wat is het internet toch een puinhoop he.
π€£ En wij kunnen daar op 2 manieren mee omgaan:
We doen nu 1
(nog beter door jouw wappa-techs commit). 2
is misschien nuttiger voor de eindgebruiken (ALS ie er iets mee zou doen als wij zeggen: "eh je draait GA2 en GA4 wutwut") maar wel veel moeilijker.
Wat we ook kunnen doen voor GA, omdat die versies zo belangrijk zijn, en je meerdere tegelijk kan hebben, is losse techs maken. Dan kunnen we ze tegelijk detecteren en opslaan. Soort tussenoplossing. Alle bestaande "Google Analytics" metrics zijn versie-onbekend, en dan gaan we vanaf nu "Google Analytics 4" etc techs detecteren. Of misschien fuck it ze zoeken die versies zelf maar uit, wij kunnen niet ALLES voor ze doen.
GA splitsen evt is een nieuw ding. Deze is goed genoeg IMO. Zal ik voor vanavond heel cookieNames
doorvoeren op Prod?
Versie tonen is nuttig: Als je GA2 of UA hebt draaien, ook al is het naast GA4, dan is je site niet goed onderhouden.
Is wat mij betreft ook een apart issue.
Ik ben het niet eens met je SmartSite tech. 100% confidence als een cookie met een _
eindigt op guid
? Dat is niet goed genoeg.
De rest ben ik aan het doorvoeren. Geef me nog 5 min voordat je gaat rechecken voor je fav websites.
Volgens mij ben ik klaar. 3 repos op 3 servers. Je mag zelf wat testen als je durft. WhatCms draait niet op Prod zelf, maar op een willekeurige worker, dus als je ze allebei wil testen, moet je ~ 5 checks tegelijk starten, dan krijgen ze allebei wat.
k ben het niet eens met je SmartSite tech.
Dat begrijp ik. Al hebben we in 36.848 cookies in 7.808 checks in 7.808 sites geen enkele match op _guid behalve de websites die ook Γ©cht Smartsite zijn. Maar ik puzzel nog even verder ooit.
Je mag zelf wat testen als je durft.
Ah crap. Er stonden handmatige SF checks aan, dus die houden de restart van de queue op, dus met een beetje pech duurt het nog een half uur dat ie weer een WhatCms check gaat doen.
Het werkt ondertussen weer zag ik.
mijn geknutselde query in Checks History:
Wappa - GA zonder versie (gisteren):
Wappa - GA versie UA:
Wappa - GA versie GA4:
Veel UA's zijn eigenlijk GA4 zien we nu. De oude wappa deed dat niet echt goed.
Veel UA's zijn eigenlijk GA4 zien we nu. De oude wappa deed dat niet echt goed.
Klopt dat wel echt? De laatste ~ 20 detections zijn ALLEEN maar GA4: https://app.digitalinsightsplatform.nl/custom-queries/166 Je moet ook wel een paar GA2 en UA vinden, anders vertrouw ik het niet.
We zijn aan het kletsen in een publieke repo nu trouwens he... Het zijn nog geen geheimen, maar let op. Zulke details kunnen we beter in de private app repo doen.
https://github.com/dipnl/app/issues/905
cookieNames
[ ] Als nieuwe wappa op prod staat, deze wip doorvoeren
voor DevCMS wilde ik een pattern toevoegen dat kijkt naar een geplaatst cookie:
Maar Wappalyzer staat geen regex toe in cookie names. Vandaar ook dat stukje custom Google Analytics cookie code in de codebase van wappa: