Vreemde tekens in URL's, dat kan toch niet? Fout, dat kan wel. Ook emoji's!

Ingediend door Dirk Hornstra op 08-apr-2024 20:20

Voor het monitoren van websites maken we gebruik van Zabbix. Kwestie van sjablonen (templates) inrichten, URL's toevoegen en "gaan met die banaan". Dat leek allemaal goed te gaan, tot ik erachter kwam dat een aantal URL's niet in Zabbix aangemaakt werden. Hoe kan dat?

Want in het verleden heeft mijn voormalig collega Robin Bos in Zabbix de "discovery" ingericht, het geautoriseerd aanroepen van een URL waar ik alle bindings van de websites aanlever. En toen kwam ik erachter dat in de URL "vreemde tekens" stonden. Mijn eerste reactie was: "maar dat mag toch helemaal niet"?
Fout... dat mag dus wel!

Na een wat oppervlakkige zoektocht kwam ik daar achter en ben toen eens gaan kijken ik ik misschien zaken moest "escapen", dus dat ik geen ö, maar een \u00F6 of iets dergelijks moest aanleveren. Maar als ik dat handmatig uitvoerde, dan weigerde Zabbix die gegevens op te slaan omdat er "ongeldige tekens in de invoer zaten". Oké, ik ben iemand die graag zelf zaken gaat uitzoeken, maar omdat ik nog veel andere zaken op mijn werklijst heb, heb ik maar eens contact opgenomen met Brian van Baekel van Opensource ICT Solutions. Een aantal jaren geleden heb ik Zabbix-training van hem gehad en mogelijk dat hij al eerder tegen dit punt aangelopen was.

Dat contact liep via LinkedIn. En eigenlijk had ik daar al kunnen zien wat de oplossing was. Elke keer als ik namelijk een URL met een ö of een â in mijn gesprek plakte, kreeg ik een heel andere URL te zien. Wel deels de URL die ik kopieerde - plakte, maar waarbij het "vreemde teken" weg was en er stonden wat extra tekens voor en na. Dat gebeurde ook als ik de URL in een browser opvroeg en dan die uit de adresbalk naar kladblok kopieerde - plakte, zo'n vreemde URL. Dus ik dacht "wat is Windows voor vreemde dingen aan het doen?". Maar het bleek dat Windows/kladblok/je browser het juiste deed!

Brian was dit nog niet eerder tegengekomen, maar hij gaf aan dat het kopiëren en plakken wel werkte. Er kwamen bij mij wat andere zaken tussendoor, maar op 25 maart wilde ik gaan kijken of dat bij mij nu ook wilde lukken. Ik stuurde de URL eens door naar mijn collega Pieter, die er ook eens naar keek, een zoekactie deed en toen uitkwam op de Wikipedia pagina over Punycode. Bij mij triggerde dat meteen "de Punica-oase", mocht je die reclame ook nog kennen, dan ben je waarschijnlijk tussen 1975-1980 geboren :)

In ieder geval, het is dus een manier om Unicode in URL's op een unieke manier om te kunnen zetten naar ASCII. Via deze Stack Overflow post over "welke karakters toegestaan zijn" heb ik ook nog de RFC's kunnen vinden, 1738 is de originele waarin duidelijk US-ASCII genoemd wordt. In de post wordt nog 3986 en 3987 genoemd. Waarbij wordt verwezen naar 3490 en in Wikipedia verwijst Punycode naar 3492.

Gelukkig hoeven we dit zelf niet allemaal zelf te bouwen. Als je .NET gebruikt, dan kun je gebruik maken van de System.Globalization.IdnMapping-class.

In het kort:

 

var uri = "bücher.com";
var idn = new System.Globalization.IdnMapping();
var punyCode = idn.GetAscii(uri);
uri = idn.GetUnicode(punyCode);

 

Ik meende dat ik recent in de buurt op een spandoek ook zo'n URL zag, namelijk boathûs.nl. En misschien stond het wel zo op het spandoek, maar dat bedrijf heeft toch gekozen voor "de u zonder dakje" dus boathus.nl. Daarmee loopt dit bedrijf wel het risico dat een "bad actor" een website opzet met wél die domeinnaam en misbruik probeert te maken door mensen te laten inloggen o.i.d. Op deze pagina van Barracuda worden een aantal manieren genoemd waarop "de bad guys" mensen proberen te misleiden om op linkjes naar websites te laten klikken. Dat kan met punycode, maar ook met typosquatting (jouw URL bevat een woord waarbij makkelijk 1 klinker of medeklinker vergeten kan worden en die domeinnaam wordt door een "slechterik" geregistreerd). Je ziet het zelf wel, als je een vaag mailtje krijgt en de link wijst naar een t.co/... adres, dan weet je dat het "foute boel is" en ga je die link niet aanklikken. Als de link echter op deze manier opgebouwd is, is het mogelijk dat je toch gaat klikken. Blijft dus de gouden regel: nooit op linkjes in e-mails klikken. Altijd zelf in je browser zelf de correcte URL intypen.

In ieder geval, dit was een klein zijspoor, om dit verhaal compleet te maken, we zagen dat je nu ook emoji's als URL kunt gebruiken!

💩.la verwijst naar https://xn--ls8h.la/