dipnl / wappalyzer

Identify technology on websites.
https://www.wappalyzer.com
2 stars 0 forks source link

geen regex op cookie name mogelijk #2

Closed simonbesters closed 4 months ago

simonbesters commented 9 months ago

https://github.com/dipnl/app/issues/905

voor DevCMS wilde ik een pattern toevoegen dat kijkt naar een geplaatst cookie:

_deventer_session_
_olst-wijhe_session_

Maar Wappalyzer staat geen regex toe in cookie names. Vandaar ook dat stukje custom Google Analytics cookie code in de codebase van wappa:

        // 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]
          }
        })
rudiedirkx commented 8 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.

rudiedirkx commented 8 months ago

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.

rudiedirkx commented 8 months ago

Briljante hack door @simonbesters: niet "cookies" controleren, maar Set-Cookie header:

"headers": {
    "Set-Cookie": "\\w+_session=\\;confidence:50"
},
simonbesters commented 4 months ago

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]
    }
})
rudiedirkx commented 4 months ago

Fuk yea! Ik dacht ff diff bekijken, maar Github wil alleen maar vergelijken met de originele repo van tienduizend jaar geleden 😠

image


Github Virtual Assistent!! https://stackoverflow.com/questions/38831301/how-to-un-fork-the-github-repository/66470086#66470086

rudiedirkx commented 4 months ago

https://github.com/dipnl/wappalyzer/compare/npm...cookieNames

Hoe heb je de lokale dev ingericht? Zelf symlink? npm link? node_modules bewerken?

simonbesters commented 4 months ago

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.

simonbesters commented 4 months ago

Github Virtual Assistent!! https://stackoverflow.com/questions/38831301/how-to-un-fork-the-github-repository/66470086#66470086

Dat durf ik denk niet te doen.

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

Die "gekke Google Analytics strippen" veranderen we natuurlijk wel in de tech in de code repo. Maar SmartSite?

rudiedirkx commented 4 months ago

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"
    },
rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

Ik ben nu tevreden.

rudiedirkx commented 4 months ago

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.

simonbesters commented 4 months ago

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.

simonbesters commented 4 months ago

Dit was een belangrijke missing feature.

image

En ik kan eindelijk de laatste 3 'geen/onbekend' wegwerken: 3x Smartsite via cookieNames...

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

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!

rudiedirkx commented 4 months ago

Gevonden GA door Wappa (in de WhatCMS checker): https://app.digitalinsightsplatform.nl/custom-queries/166 Heel vaak zonder versie...

rudiedirkx commented 4 months ago

En heel vaak UA. Gegroepeerd op versie: https://app.digitalinsightsplatform.nl/custom-queries/167

simonbesters commented 4 months ago

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.

rudiedirkx commented 4 months ago

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?

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

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 =(

simonbesters commented 4 months ago

Ik duik er morgen even in.

rudiedirkx commented 4 months ago

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.

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.

simonbesters commented 4 months ago

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.

simonbesters commented 4 months ago

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.

simonbesters commented 4 months ago

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/1687523

simonbesters commented 4 months ago

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).

simonbesters commented 4 months ago

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.

rudiedirkx commented 4 months ago

Wat is het internet toch een puinhoop he.

🀣 En wij kunnen daar op 2 manieren mee omgaan:

  1. de beste/meest nuttige samenvatting eruithalen waar we iets aan hebben
  2. alle puinhoop eruithalen om meer details over de exacte soort puinhoop te hebben en gebruiken

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.

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

GA splitsen evt is een nieuw ding. Deze is goed genoeg IMO. Zal ik voor vanavond heel cookieNames doorvoeren op Prod?

simonbesters commented 4 months ago

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.

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

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.

simonbesters commented 4 months ago

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.

rudiedirkx commented 4 months ago

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.

simonbesters commented 4 months ago

Het werkt ondertussen weer zag ik.

simonbesters commented 4 months ago

mijn geknutselde query in Checks History:

Wappa - GA zonder versie (gisteren):

https://app.digitalinsightsplatform.nl/admin/checks/history?organization=&check=4&status=complete&date=&creator=&result=%22version%22%3A%22%22%2C%22icon%22%3A%22Google+Analytics.svg%22

Wappa - GA versie UA:

https://app.digitalinsightsplatform.nl/admin/checks/history?organization=&check=4&status=complete&date=&creator=&result=%22version%22%3A%22UA%22%2C%22icon%22%3A%22Google+Analytics.svg%22

Wappa - GA versie GA4:

https://app.digitalinsightsplatform.nl/admin/checks/history?organization=&check=4&status=complete&date=&creator=&result=%22version%22%3A%22GA4%22%2C%22icon%22%3A%22Google+Analytics.svg%22

simonbesters commented 4 months ago

Veel UA's zijn eigenlijk GA4 zien we nu. De oude wappa deed dat niet echt goed.

rudiedirkx commented 4 months ago

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.

rudiedirkx commented 4 months ago

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.