<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>dns &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/dns/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Mon, 27 Apr 2026 16:21:02 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>dns &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Preventing NAPTR Spam]]></title>
		<link>https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/</link>
					<comments>https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 18 Aug 2025 11:34:47 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[privacy]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=61707</guid>

					<description><![CDATA[You&#039;re the sort of cool nerd who knows all the weird esoterica which makes up DNS, right? In amongst your A, AAAA, SOA, and MX records, there&#039;s a little used NAPTR. Yes, you can use DNS to store Name Authority Pointers!  What?!  It is yet another of those baroque standards which spits out things like:  cid.uri.arpa. ;;       order pref flags service        regexp           replacement IN NAPTR…]]></description>
										<content:encoded><![CDATA[<p>You're the sort of cool nerd who knows all the weird esoterica which makes up DNS, right? In amongst your A, AAAA, SOA, and MX records, there's a little used <a href="https://dn.org/understanding-naptr-records-and-their-role-in-dns/">NAPTR</a>. Yes, you can use DNS to store Name Authority Pointers!</p>

<p>What?!</p>

<p>It is yet another of those <a href="https://shkspr.mobi/blog/2015/11/a-polite-way-to-say-ridiculously-complicated/">baroque</a> standards which spits out things like:</p>

<pre><code class="language-_">cid.uri.arpa.
;;       order pref flags service        regexp           replacement
IN NAPTR 100   10   ""    ""  "!^cid:.+@([^\.]+\.)(.*)$!\2!i"    .
</code></pre>

<p>Essentially, it is a way to store contact details within a DNS record (rather than in a WHOIS record).</p>

<p>Back in the early 2000s, the dotTel company opened the .tel TLD with a promise that it could be used to store your contact details in DNS<sup id="fnref:history"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:history" class="footnote-ref" title="Even back in 2009 I didn't think it was terribly compelling. By 2013, it was almost dead. And in 2017 it became just another generic TLD." role="doc-noteref">0</a></sup>.  The idea was simple, rather than storing my phone number in your address book, you'd store my domain name - <a href="https://edent.tel/">https://edent.tel/</a></p>

<p>If I updated my phone number, changed my avatar, or deleted an old email address - your address book would automatically update via DNS. Nifty!</p>

<p>If you didn't know a company's phone number, you'd dial <code>example.com</code> on your phone and it would grab the phone numbers from DNS. Wowsers trousers!</p>

<p>You can see an example by running:</p>

<pre><code class="language-_">dig justin.tel NAPTR
</code></pre>

<p>You'll get back something like:</p>

<pre><code class="language-_">NAPTR   100 101 "u" "E2U+web:http" "!^.*$!http://justinkhayward.com!" 
</code></pre>

<p>A phone number stored in a NAPTR would look something like:</p>

<pre><code class="language-_">NAPTR   100 100 "u" "E2U+voice:tel" "!^.*$!tel:+442074676450!" .
</code></pre>

<p>Brilliant! But there's a problem - aside from the somewhat obtuse syntax! - and that problem is spam.</p>

<p>Those of you old enough to remember putting your unexpurgated contact details into WHOIS know that the minute it went live you were bombarded with sales calls and scammy emails. So putting your details directly into DNS is a bad idea, right?</p>

<p>.tel thought they'd come up with a clever hack to prevent that. As they explain in <a href="https://web.archive.org/web/20120504070307/https://dev.telnic.org/docs/privacy.pdf">the .tel privacy paper</a>, records can be individually encrypted.</p>

<ul>
<li>Alice has her contact details on <code>alice.tel</code></li>
<li>Bob has his contact details on <code>bob.tel</code></li>
<li>Alice agrees to share her phone number with Bob.</li>
<li>Alice looks up Bob's public key from <code>bob.tel</code>.</li>
<li>Alice encrypts her phone number.</li>
<li>Alice generates a new DNS record specifically for Bob - <code>bob123456.alice.tel</code></li>
<li>Alice shares the name of the new record with Bob.</li>
<li>Bob downloads the NAPTR from <code>bob123456.alice.tel</code> and decrypts it with his private key.</li>
<li>Bob periodically checks for updates.</li>
<li>Alice can decide to revoke Bob's access by removing the data or subdomain.</li>
</ul>

<p>Clever! If convoluted.  You can <a href="https://rikkles.blogspot.com/2008/05/privacy-in-tel.html">read more about the way friendships and public keys were managed</a> and <a href="https://web.archive.org/web/20120504073313/https://dev.telnic.org/docs/naptr.pdf">some more technical details</a>.</p>

<p>Are there better ways?</p>

<h2 id="multi-recipient-encryption"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#multi-recipient-encryption">Multi Recipient Encryption</a></h2>

<p>When people say "you can't give Government a secret key to your private messages" they are technically incorrect<sup id="fnref:worst"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:worst" class="footnote-ref" title="The worst type of incorrect." role="doc-noteref">1</a></sup>.  Multi Recipient Encryption is a thing.</p>

<p>Here's a very simplified and subtly wrong explanation:</p>

<ul>
<li>Alice creates a <em>temporary</em> public/private keypair.</li>
<li>Alice encrypts some text with her temporary public key - resulting in <code>e</code>.</li>
<li>Alice encrypts the temporary private key with Bob's public key - resulting in <code>k1</code>.</li>
<li>Alice encrypts the temporary private key with Charlie's public key - resulting in <code>k2</code>.</li>
<li>Alice publishes the concatenation of <code>e+k1+k2</code></li>
<li>Bob downloads the file, decrypts <em>his</em> version of the key, and uses that to decrypt the message.</li>
<li>Charlie does the same.</li>
</ul>

<p>In this way, both recipients are able to decipher the text but no one else can.  So can we just shove an encrypted record in the NAPTR?  Not quite.</p>

<p>There are two main problems with this for DNS purposes.</p>

<ol>
<li>The encrypted size grows with every recipient.</li>
<li>Every time a new recipient is added, everyone needs to download the data again even if it is unchanged.</li>
</ol>

<p>Generally speaking, DNS records are a maximum of 255 characters - <a href="https://kb.isc.org/docs/aa-00356">although they can be concatenated</a>.</p>

<p>An extra record could be used to say when the plaintext was last updated - which would let existing recipients know not to download it again.</p>

<p>Monitoring for changes would allow a user to know roughly how many recipients had been added or removed.</p>

<p>What other ways could there be?</p>

<h2 id="what-else-could-be-done"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#what-else-could-be-done">What else could be done?</a></h2>

<p>Here's the user story.</p>

<ul>
<li>I want a friend to subscribe to my [phone|email|street|social media] address(es).</li>
<li>I must be able to pre-approve access.</li>
<li>When I change my address, my friend should get my new details.</li>
<li>I need to be able to revoke people's access.</li>
<li>This should be done via DNS<sup id="fnref:dns"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:dns" class="footnote-ref" title="Why DNS? Because I like making life difficult." role="doc-noteref">2</a></sup>.</li>
</ul>

<p>Using an API this would be playing on easy mode. A friend (or rather, their app) would request an API key from my service. I would approve it, and then ✨magic✨.</p>

<p>DNS isn't <em>technically</em> an API although, with enough effort, you could make it behave like one<sup id="fnref:marquis"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:marquis" class="footnote-ref" title="If you were a sadist!" role="doc-noteref">3</a></sup>.</p>

<p>So - how would <em>you</em> do it?</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:history">
<p>Even back in 2009 <a href="https://shkspr.mobi/blog/2009/03/some-thoughts-on-tel/">I didn't think it was terribly compelling</a>. By 2013, <a href="https://shkspr.mobi/blog/2013/03/should-i-renew-my-tel-domain/">it was almost dead</a>. And in 2017 <a href="https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/">it became just another generic TLD</a>.&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:history" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:worst">
<p>The <em>worst</em> type of incorrect.&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:worst" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:dns">
<p>Why DNS? Because I like making life difficult.&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:dns" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:marquis">
<p>If you were a sadist!&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:marquis" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=61707&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Get the location of the ISS using DNS]]></title>
		<link>https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/</link>
					<comments>https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 06 Jul 2025 11:34:33 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[trivia]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=61693</guid>

					<description><![CDATA[I love DNS esoterica. Weird little things that you can shove in the global directory to be distributed around the world instantly(ish).  Domain names, like www.example.com usually resolve to servers. As much as we think of &#34;the cloud&#34; as being some intangible morass of ethereal Turing-machines floating in probability space, the more prosaic reality is that they&#039;re just boxen in data centres. They …]]></description>
										<content:encoded><![CDATA[<p>I love DNS esoterica. Weird little things that you can shove in the global directory to be distributed around the world instantly(ish).</p>

<p>Domain names, like <code>www.example.com</code> usually resolve to servers. As much as we think of "the cloud" as being some intangible morass of ethereal Turing-machines floating in probability space, the more prosaic reality is that they're just boxen in data centres. They have a physical location.</p>

<p>Got a tricky machine which is playing silly-buggers? Wouldn't it be nice to know exactly where it is? That way you can visit and give it some <a href="https://tvtropes.org/pmwiki/pmwiki.php/Main/PercussiveMaintenance">percussive maintenance</a>.</p>

<p>Enter the DNS LOC record!</p>

<p>The snappily titled <a href="https://www.rfc-editor.org/rfc/rfc1876.html">RFC 1876</a> is an <em>experimental</em> standard. It allows you to create a DNS record which specifies the latitude and longitude of your server. Of course, some data-centres are very tall and some are underground. So it also contains an altitude parameter.</p>

<p>The standard allows for a minimum altitude of -100,000 metres - deep enough for any bunker! The maximum altitude is 42,849,672 metres which is high enough to allow it to be used on <a href="https://www.esa.int/Enabling_Support/Space_Transportation/Types_of_orbits#GEO">satellites in geostationary orbit</a>.</p>

<p>So, as a bit of fun, I decided to create <code>where-is-the-iss.dedyn.io</code></p>

<p>It isn't a website. You can't ping it. There's no way to interact with it <em>except</em> by using DNS.  Yup! You can use a DNS query to get the (approximate) location of the International Space Station!</p>

<p>Linux and Mac users<sup id="fnref:win"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:win" class="footnote-ref" title="I don't think there's a way for Windows users to look up LOC records using PowerShell or the Command Prompt." role="doc-noteref">0</a></sup> can run:</p>

<p><code>dig where-is-the-iss.dedyn.io LOC</code></p>

<p>And receive back the latest position of the ISS:</p>

<pre><code class="language-_">;; ANSWER SECTION:
where-is-the-iss.dedyn.io. 1066 IN  LOC 47 24 53.500 N 66 12 12.070 W 430520m 10000m 10000m 10000m
</code></pre>

<p>The DNS records are updated every 15 minutes on a best-effort basis<sup id="fnref:nasa"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:nasa" class="footnote-ref" title="Look, I'm not NASA, OK? If you're using this to help you dock then I cannot be held responsible." role="doc-noteref">1</a></sup>.</p>

<h2 id="how"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#how">How</a></h2>

<p>The lovely people at <a href="https://www.n2yo.com">N2YO</a> have a website which allows you to track <em>loads</em> of objects in orbit.  They also have an <a href="https://www.n2yo.com/api/">easy to use API</a> with a generous free tier.</p>

<p>Calling <code>https://api.n2yo.com/rest/v1/satellite/positions/25544/0/0/0/1/&amp;apiKey=_____</code> gets back the latest position:</p>

<pre><code class="language-json">{
    "info": {
        "satname": "SPACE STATION",
        "satid": 25544,
        "transactionscount": 7
    },
    "positions": [
        {
            "satlatitude": -21.25409321,
            "satlongitude": 140.3335763,
            "sataltitude": 420.09,
            "azimuth": 292.92,
            "elevation": -70.95,
            "ra": 202.69300845,
            "dec": -32.16097472,
            "timestamp": 1751366048,
            "eclipsed": true
        }
    ]
}
</code></pre>

<p>Note that the altitude is in Km, whereas the LOC format requires m.</p>

<p>The latitude and longitude are in decimal format - they need to be converted to Degrees, Minutes, and Seconds.</p>

<p>There were only a few free domain name providers who offer an API for updating LOC records.  I went for <a href="https://desec.io/">deSEC</a> a charity from Berlin. They have <a href="https://desec.readthedocs.io/en/latest/">comprehensive API documentation</a>.</p>

<p>Adding the initial LOC record is done with:</p>

<pre><code class="language-bash">curl https://desec.io/api/v1/domains/where-is-the-iss.dedyn.io/rrsets/ \
    --header "Authorization: Token _______" \
    --header "Content-Type: application/json" --data @- &lt;&lt;&lt; \
    '{"type": "LOC", "records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"], "ttl": 900}'
</code></pre>

<p>However, updating the record is a little trickier. it needs to be sent as an <a href="https://desec.readthedocs.io/en/latest/dns/rrsets.html#modifying-an-rrset">HTTP PATCH</a> to a subtly different URl. The PATCH only needs to send the data which have changed.</p>

<pre><code class="language-bash">curl -X PATCH https://desec.io/api/v1/domains/where-is-the-iss.dedyn.io/rrsets/@/LOC/ \
    --header "Authorization: Token _______" \
    --header "Content-Type: application/json" --data @- &lt;&lt;&lt; \
    '{"records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"]}'
</code></pre>

<p>I set the <a href="https://ttl-calc.com/">Time To Live</a> at 900 seconds. Every 15 minutes my code runs to update the record<sup id="fnref:api"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:api" class="footnote-ref" title="I suppose you could build an API with unlimited request limits by distributing data via DNS TXT records. Would best suit static or infrequently updating data. Push it once to DNS and let everyone…" role="doc-noteref">2</a></sup>. That keeps me well within the API limits for both services.  I could add TXT records showing when it was last updated, or other sorts of unstructured data, but I think this is enough for a quick proof-of-concept.</p>

<p>There you have it! A complex and silly way to demonstrate how DNS can be used to hold the most unlikely of records<sup id="fnref:naptr"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:naptr" class="footnote-ref" title="See if you can find the other interesting record I've added to DNS!" role="doc-noteref">3</a></sup>.  Say, I wonder how you'd represent the co-ordinates of the Mars Rover…?</p>

<h2 id="further-reading"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#further-reading">Further Reading</a></h2>

<p>For more DNS weirdness, please see my other posts:</p>

<ul>
<li><a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/">BIMI - SVG in DNS TXT WTF?!</a></li>
<li><a href="https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/">Why you can't dig Switzerland</a></li>
</ul>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:win">
<p>I don't think there's a way for Windows users to look up LOC records using PowerShell or the Command Prompt.&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:win" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:nasa">
<p>Look, I'm not NASA, OK? If you're using this to help you dock then I cannot be held responsible.&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:nasa" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:api">
<p>I suppose you could build an API with unlimited request limits by distributing data via DNS TXT records. Would best suit static or infrequently updating data. Push it once to DNS and let everyone query it semi-locally.&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:api" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:naptr">
<p>See if you can find the other interesting record I've added to DNS!&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:naptr" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=61693&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How to prevent Payment Pointer fraud]]></title>
		<link>https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/</link>
					<comments>https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 29 Mar 2025 12:34:31 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[CyberSecurity]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[WebMonetization]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=59172</guid>

					<description><![CDATA[There&#039;s a new Web Standard in town! Meet WebMonetization - it aims to be a low effort way to help users passively pay website owners.  The pitch is simple.  A website owner places a single new line in their HTML&#039;s &#60;head&#62; - something like this:  &#60;link rel=&#34;monetization&#34; href=&#34;https://wallet.example.com/edent&#34; /&#62;   That address is a &#34;Payment Pointer&#34;.  As a user browses the web, their browser takes …]]></description>
										<content:encoded><![CDATA[<p>There's a new Web Standard in town! Meet <a href="https://webmonetization.org">WebMonetization</a> - it aims to be a low effort way to help users passively pay website owners.</p>

<p>The pitch is simple.  A website owner places a single new line in their HTML's <code>&lt;head&gt;</code> - something like this:</p>

<pre><code class="language-html">&lt;link rel="monetization" href="https://wallet.example.com/edent" /&gt;
</code></pre>

<p>That address is a "<a href="https://paymentpointers.org/">Payment Pointer</a>".  As a user browses the web, their browser takes note of all the sites they've visited. At the end of the month, the funds in the user's digital wallet are split proportionally between the sites which have enabled WebMonetization. The user's budget is under their control and there are various technical measures to stop websites hijacking funds.</p>

<p>This could be revolutionary<sup id="fnref:coil"><a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#fn:coil" class="footnote-ref" title="To be fair, Coil tried this in 2020 and it didn't take off. But the new standard has a lot less cryptocurrency bollocks, so maybe it'll work this time?" role="doc-noteref">0</a></sup>.</p>

<p>But there are some interesting fraud angles to consider.  Let me give you a couple of examples.</p>

<h2 id="pointer-hijacking"><a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#pointer-hijacking">Pointer Hijacking</a></h2>

<p>Suppose I hacked into a popular site like BBC.co.uk and surreptitiously included my link in their HTML. Even if I was successful for just a few minutes, I could syphon off a significant amount of money.</p>

<p>At the moment, the WebMonetization plugin <em>only</em> looks at the page's HTML to find payment pointers.  There's no way to say "This site doesn't use WebMonetization" or an out-of-band way to signal which Payment Pointer is correct. Obviously there are lots of ways to profit from hacking a website - but most of them are ostentatious or require the user to interact.  This is subtle and silent.</p>

<p>How long would it take you to notice that a single meta element had snuck into some complex markup? When you discover it, what can you do? Money sent to that wallet can be transferred out in an instant. You might be able to get the wallet provider to freeze the funds or suspend the account, but that may not get you any money back.</p>

<p>Similarly, a <a href="https://lifehacker.com/tech/honey-influencer-scam-explained">Web Extension like Honey</a> could re-write the page's source code to remove or change an existing payment pointer.</p>

<h3 id="possible-solutions"><a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#possible-solutions">Possible Solutions</a></h3>

<p>Perhaps the username associated with a Payment Pointer should be that of the website it uses?  something like <code>href="https://wallet.example.com/shkspr.mobi"</code></p>

<p>That's superficially attractive, but comes with issues.  I might have several domains - do I want to create a pointer for each of them?</p>

<p>There's also a legitimate use-case for having my pointer on someone else's site. Suppose I write a guest article for someone - their website might contain:</p>

<pre><code class="language-html">&lt;link rel="monetization" href="https://wallet.example.com/edent" /&gt;
&lt;link rel="monetization" href="https://wallet.coin_base.biz/BigSite" /&gt;
</code></pre>

<p>Which would allow us to split the revenue.</p>

<p>Similarly, a site like GitHub might let me use my Payment Pointer when people are visiting my specific page.</p>

<p>So, perhaps site owners should add a <a href="https://en.wikipedia.org/wiki/Well-known_URI">.well-known directive</a> which lists acceptable Pointers? Well, if I have the ability to add arbitrary HTML to a site, I might also be able to upload files. So it isn't particularly robust protection.</p>

<p>Alright, what are other ways typically used to prove the legitimacy of data? DNS maybe? As <a href="https://knowyourmeme.com/memes/one-more-lane-bro-one-more-lane-will-fix-it">the popular meme goes</a>:</p>

<blockquote class="social-embed" id="social-embed-114213713873874536" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://infosec.exchange/@atax1a" class="social-embed-user" itemprop="url"><img class="social-embed-avatar" src="https://media.infosec.exchange/infosec.exchange/accounts/avatars/109/323/500/710/698/443/original/20fd7265ad1541f5.png" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">@atax1a@infosec.exchange</p>mx alex tax1a - 2020 (5)</div></a><img class="social-embed-logo" alt="Mastodon" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='Mastodon' role='img' viewBox='0 0 512 512' fill='%23fff'%3E%3Cpath d='m0 0H512V512H0'/%3E%3ClinearGradient id='a' y2='1'%3E%3Cstop offset='0' stop-color='%236364ff'/%3E%3Cstop offset='1' stop-color='%23563acc'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M317 381q-124 28-123-39 69 15 149 2 67-13 72-80 3-101-3-116-19-49-72-58-98-10-162 0-56 10-75 58-12 31-3 147 3 32 9 53 13 46 70 69 83 23 138-9'/%3E%3Cpath d='M360 293h-36v-93q-1-26-29-23-20 3-20 34v47h-36v-47q0-31-20-34-30-3-30 28v88h-36v-91q1-51 44-60 33-5 51 21l9 15 9-15q16-26 51-21 43 9 43 60'/%3E%3C/svg%3E"></header><section class="social-embed-text" itemprop="articleBody"><p><span class="h-card" translate="no"><a href="https://mastodon.social/@jwz" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>jwz</span></a></span> <span class="h-card" translate="no"><a href="https://toad.social/@grumpybozo" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>grumpybozo</span></a></span> just one more public key in a TXT record, that'll fix email, just gotta add one more TXT record bro</p><div class="social-embed-media-grid"></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://infosec.exchange/@atax1a/114213713873874536"><span aria-label="198 likes" class="social-embed-meta">❤️ 198</span><span aria-label="5 replies" class="social-embed-meta">💬 5</span><span aria-label="85 reposts" class="social-embed-meta">🔁 85</span><time datetime="2025-03-23T20:49:28.047Z" itemprop="datePublished">20:49 - Sun 23 March 2025</time></a></footer></blockquote>

<p>Someone with the ability to publish on a website is <em>less</em> likely to have access to DNS records. So having (yet another) DNS record could provide some protection. But DNS is tricky to get right, annoying to update, and a pain to repeatedly configure if you're constantly adding and removing legitimate users.</p>

<h2 id="reputation-hijacking"><a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#reputation-hijacking">Reputation Hijacking</a></h2>

<p>Suppose the propaganda experts in The People's Republic of Blefuscu decide to launch a fake site for your favourite political cause. It contains all sorts of horrible lies about a political candidate and tarnishes the reputation of something you hold dear.  The sneaky tricksters put in a Payment Pointer which is the same as the legitimate site.</p>

<p>"This must be an official site," people say. "Look! It even funnels money to the same wallet as the other official sites!"</p>

<p>There's no way to disclaim money sent to you.  Perhaps a political opponent operates an illegal Bonsai Kitten farm - but puts your Payment Pointer on it.</p>

<p>"I don't squash kittens into jars!" You cry as they drag you away. The police are unconvinced "Then why are you profiting from it?"</p>

<h3 id="possible-solutions"><a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#possible-solutions">Possible Solutions</a></h3>

<p>A wallet provider needs to be able to list which sites are <em>your</em> sites.</p>

<p>You log in to your wallet provider and fill in a list of websites you want your Payment Pointer to work on. Add your blog, your recipe site, your homemade video forum etc.  When a user browses a website, they see the Payment Pointer and ask it for a list of valid sites. If "BonsaiKitten.biz" isn't on there, no payment is sent.</p>

<p>Much like OAuth, there is an administrative hassle to this. You may need to regularly update the sites you use, and hope that your forgetfulness doesn't cost you in lost income.</p>

<h2 id="final-thoughts"><a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#final-thoughts">Final Thoughts</a></h2>

<p>I'm moderately excited about WebMonetization. If it lives up to its promises, it could unleash a new wave of sustainable creativity across the web. If it is easier to make micropayments or donations to sites you like, without being subject to the invasive tracking of adverts, that would be brilliant.</p>

<p>The problems I've identified above are (I hope) minor. Someone sending you money without your consent may be concerning, but there's not much of an economic incentive to enrich your foes.</p>

<p>Think I'm wrong? Reckon you've found another fraudulent avenue? Want to argue about whether this is a likely problem? Stick a comment in the box.</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:coil">
<p>To be fair, <a href="https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/">Coil tried this in 2020</a> and it didn't take off. But the new standard has a lot less cryptocurrency bollocks, so maybe it'll work this time?&nbsp;<a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/#fnref:coil" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=59172&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Getting lots of BIMI images using Python]]></title>
		<link>https://shkspr.mobi/blog/2024/06/getting-lots-of-bimi-images-using-python/</link>
					<comments>https://shkspr.mobi/blog/2024/06/getting-lots-of-bimi-images-using-python/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 07 Jun 2024 11:34:09 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[BIMI]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[svg]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=50701</guid>

					<description><![CDATA[I&#039;ve written before about the moribund BIMI specification. It&#039;s a way for brands to include a trusted logo when they send emails.  It isn&#039;t much used and, apparently, is riddled with security issues.  I thought it might be fun to grab all the BIMI images from the most popular websites, so I can potentially use them in my SuperTinyIcons project.  BIMI images are SVGs. Links to a site&#039;s BIMI are…]]></description>
										<content:encoded><![CDATA[<p>I've written before about the <a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/">moribund BIMI specification</a>. It's a way for brands to include a trusted logo when they send emails.  It isn't much used and, apparently, is <a href="https://mailarchive.ietf.org/arch/msg/bimi/xzYRH72V2HE9xeUfXK_zUgYSI7k/">riddled with</a> <a href="https://mailarchive.ietf.org/arch/msg/bimi/PS8Xf1hQ41oCAwtsUvVsbRSs34Q/">security issues</a>.</p>

<p>I thought it might be fun to grab all the BIMI images from the most popular websites, so I can potentially use them in my <a href="https://shkspr.mobi/blog/2020/05/some-updates-to-supertinyicons/">SuperTinyIcons project</a>.</p>

<p>BIMI images are SVGs. Links to a site's BIMI are stored in a domain's DNS records.  All BIMI records <em>must</em> be on a <code>default._bimi.</code> subdomain.</p>

<p>If you run <code>dig TXT default._bimi.linkedin.com</code> you'll receive back:</p>

<pre><code class="language-dns">;; ANSWER SECTION:
default._bimi.linkedin.com. 3600 IN TXT "v=BIMI1; l=https://media.licdn.com/media/AAYQAQQhAAgAAQAAAAAAABrLiVuNIZ3fRKGlFSn4hGZubg.svg; a=https://media.licdn.com/media/AAYAAQQhAAgAAQAAAAAAALe_JUaW1k4JTw6eZ_Gtj2raUw.pem;"
</code></pre>

<p>Awesome! We can grab the <a href="https://media.licdn.com/media/AAYQAQQhAAgAAQAAAAAAABrLiVuNIZ3fRKGlFSn4hGZubg.svg">.svg URl</a> and download the file.</p>

<p>Getting a list of BIMI enabled domains is difficult. Thankfully, <a href="https://www.uriports.com/blog/bimi/">Freddie Leeman has done some excellent analysis work</a> and was happy to share <a href="https://pastebin.com/si9e8dCc">a list of over 7,000 domains which have BIMI</a>.</p>

<p>Let's get cracking with a little Python.  First up, <a href="https://www.dnspython.org/">install DNSPython</a> if you don't already have it.</p>

<p>This gets the TXT record from the domain name:</p>

<pre><code class="language-python">import socket
import dns.resolver

response = dns.resolver.query('default._bimi.linkedin.com', 'TXT')
result = response.rrset.to_text()
print(result)
</code></pre>

<p>There are various ways of extracting the URl. I decided to be lazy and use a regex. Sue me.</p>

<pre><code class="language-python">import re

pattern = r'l=(https[^;"]*[;"])'
match = re.search(pattern, result)
if match:
   # Remove the trailing semicolon or quote mark
   url = match.group(1).rstrip(';\"')
   print(f'Matched URL: {url}')
else:
   print(f'No match: {result}')
</code></pre>

<p>Putting it all together, this reads in the list of domains, finds the BIMI TXT record, grabs the URl, and saves the SVG.</p>

<pre><code class="language-python">import socket
import dns.resolver
import re
import requests

headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0'
}

pattern = r'l=(https[^;"]*[;"])'

domain_file = open('domains.txt', 'r')
domains = domain_file.readlines()
domains.sort()

for domain in domains:
   bimi_domain = "default._bimi." + domain.strip()
   try:
      response = dns.resolver.query(bimi_domain, 'TXT')
      result = response.rrset.to_text()
      match = re.search(pattern, result)
      if match:
         # Remove the trailing semicolon or quote mark
         svg_url = match.group(1).rstrip(';\"')
         print(f'Downloading: {svg_url}')
         try:
            svg = requests.get(svg_url, allow_redirects=True, timeout=30, headers=headers)
            open(domain.strip() +'.svg', 'wb').write(svg.content)
         except:
            print(f'Error with {domain}: {result}')
      else:
         print(f'No match from {domain}: {result}')
   except:
      print(f'DNS error with {bimi_domain}')
</code></pre>

<p>Obviously, it could be made a lot more efficient and download the files in parallel.</p>

<p>I found a few bugs in various BIMI implementations, including:</p>

<ul>
<li>ted.com and homeadvisor.com uses a <code>http</code> URl</li>
<li>consumerreports.org and sleepfoundation.org has a misplaced space in their TXT record</li>
<li>audubon.org had an invalid certificate</li>
<li>mac.com was blank - as was discogs.com, livechatinc.com, icloud.com, me.com, lung.org, miro.com, protonmail.ch and many others.</li>
<li>alabama.gov had a timeout - as did nebraska.gov, uclahealth.org and several others.</li>
<li>politico.com had a 404 for their BIMI - as do <em>lots</em> of others.</li>
<li>coopersurgical.com is 8MB!</li>
<li>There are <em>loads</em> of SVGs which bust the <a href="https://bimigroup.org/creating-bimi-svg-logo-files/">32KB maximum size requirement</a> - some by multiple megabytes.</li>
</ul>

<p>I might spend some time over the next few weeks optimising the code and looking for any other snafus. I didn't find any with ECMAScript in them. Yet!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=50701&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/06/getting-lots-of-bimi-images-using-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[A quick look inside the HSTS file]]></title>
		<link>https://shkspr.mobi/blog/2024/01/a-quick-look-inside-the-hsts-file/</link>
					<comments>https://shkspr.mobi/blog/2024/01/a-quick-look-inside-the-hsts-file/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 03 Jan 2024 12:34:36 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[CyberSecurity]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=49041</guid>

					<description><![CDATA[You type in to your browser&#039;s address bar example.com and it automatically redirects you to the https:// version. How does your browser know that it needed to request the more secure version of a website?  The answer is... A big list.  The HTTP Strict Transport Security (HSTS) list is a list of domain names which have told Google that they always want their website served over https.  If the user …]]></description>
										<content:encoded><![CDATA[<p>You type in to your browser's address bar <code>example.com</code> and it automatically redirects you to the https:// version. How does your browser know that it needed to request the more secure version of a website?</p>

<p>The answer is... A <em>big</em> list.  The <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security">HTTP Strict Transport Security</a> (HSTS) list is a list of domain names which have told Google that they <em>always</em> want their website served over https.  If the user tries to manually request the insecure version, the browser won't let them. This means that a user's connection to, for example, their bank cannot be hijacked.  A dodgy WiFi network cannot force the user to visit an insecure and fraudulent version of a site.</p>

<p>After about a decade of use, the list is now 14MB in size, with around 130,000 entries in it.  You can <a href="https://source.chromium.org/chromium/chromium/src/+/main:net/http/transport_security_state_static.json">view the list online</a> or <a href="https://chromium.googlesource.com/chromium/src/net/+/refs/heads/main/http">download it</a>.</p>

<p>The format is relatively straightforward:</p>

<pre><code class="language-json">{
 "name": "example.com",
 "policy": "bulk-1-year",
 "mode": "force-https",
 "include_subdomains": true 
},
</code></pre>

<p>When the list is updated, <a href="https://source.chromium.org/chromium/chromium/src/+/main:net/tools/transport_security_state_generator/README.md?q=transport_security_state_static.json&amp;ss=chromium%2Fchromium%2Fsrc&amp;start=11">Chrome creates a trie with Huffman coding compression</a> - so it doesn't have to parse that monster file each time.</p>

<h2 id="a-rummage-inside"><a href="https://shkspr.mobi/blog/2024/01/a-quick-look-inside-the-hsts-file/#a-rummage-inside">A rummage inside</a></h2>

<p>The most popular (over 1,000 entries) TLDs / Public Suffixes are:</p>

<table>
<thead>
<tr>
  <th align="right">Rank</th>
  <th align="center">TLD</th>
  <th align="right">Entries</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="right">1</td>
  <td align="center">com</td>
  <td align="right">43,236</td>
</tr>
<tr>
  <td align="right">2</td>
  <td align="center">tk</td>
  <td align="right">19,022</td>
</tr>
<tr>
  <td align="right">3</td>
  <td align="center">de</td>
  <td align="right">5,216</td>
</tr>
<tr>
  <td align="right">4</td>
  <td align="center">org</td>
  <td align="right">4,731</td>
</tr>
<tr>
  <td align="right">5</td>
  <td align="center">gov</td>
  <td align="right">4,507</td>
</tr>
<tr>
  <td align="right">6</td>
  <td align="center">net</td>
  <td align="right">4,410</td>
</tr>
<tr>
  <td align="right">7</td>
  <td align="center">ga</td>
  <td align="right">4,326</td>
</tr>
<tr>
  <td align="right">8</td>
  <td align="center">nl</td>
  <td align="right">2,671</td>
</tr>
<tr>
  <td align="right">9</td>
  <td align="center">cf</td>
  <td align="right">2,458</td>
</tr>
<tr>
  <td align="right">10</td>
  <td align="center">ml</td>
  <td align="right">2,271</td>
</tr>
<tr>
  <td align="right">11</td>
  <td align="center">co.uk</td>
  <td align="right">2,139</td>
</tr>
<tr>
  <td align="right">12</td>
  <td align="center">fr</td>
  <td align="right">1,714</td>
</tr>
<tr>
  <td align="right">13</td>
  <td align="center">ru</td>
  <td align="right">1,516</td>
</tr>
<tr>
  <td align="right">14</td>
  <td align="center">eu</td>
  <td align="right">1,283</td>
</tr>
<tr>
  <td align="right">15</td>
  <td align="center">com.br</td>
  <td align="right">1,226</td>
</tr>
<tr>
  <td align="right">16</td>
  <td align="center">gq</td>
  <td align="right">1,225</td>
</tr>
<tr>
  <td align="right">17</td>
  <td align="center">io</td>
  <td align="right">1,215</td>
</tr>
<tr>
  <td align="right">18</td>
  <td align="center">com.au</td>
  <td align="right">1,202</td>
</tr>
<tr>
  <td align="right">19</td>
  <td align="center">it</td>
  <td align="right">1,103</td>
</tr>
<tr>
  <td align="right">20</td>
  <td align="center">cz</td>
  <td align="right">1,004</td>
</tr>
</tbody>
</table>

<p>After <code>.com</code>, the free <code>.tk</code> domain names absolutely dominate. I wonder how many of them are fraudulent?</p>

<p>There are 2,676 <code>.uk</code> domain names - only 537 of which aren't on <code>.co.uk</code>.</p>

<p>Going a bit further, there are 418 IDNs (which start with <code>xn--</code>).</p>

<p>And about 187 have "porn" in the domain.</p>

<p>You can't really extrapolate <em>much</em> from this as a data set. Lots of the domains seem to have expired or otherwise no longer work. Reading around <a href="https://hstspreload.org"></a><a href="https://hstspreload.org">https://hstspreload.org</a> it notes that because this list is <em>hard-coded</em> into Chrome it can take months before a site is added. Similarly, removal can take a long time as well.</p>

<p>I can't help feeling that there should be a better way to manage all this though.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=49041&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/01/a-quick-look-inside-the-hsts-file/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Konami Code Domain Name]]></title>
		<link>https://shkspr.mobi/blog/2023/01/konami-code-domain-name/</link>
					<comments>https://shkspr.mobi/blog/2023/01/konami-code-domain-name/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 04 Jan 2023 12:34:35 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[punycode]]></category>
		<category><![CDATA[url]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44415</guid>

					<description><![CDATA[More on my experiments with silly Punycode domain names.  http://↑↑↓↓←→←→ba.tk/  Yup, copy and paste that into your browser and it will resolve. Update: The free .tk domain service no longer works.  For now, it just redirects to a Wikipedia article. If you can think of a better use for it, please let me know. I wonder how mail clients do at sending emails to it?  Interestingly, Chrome sometimes th…]]></description>
										<content:encoded><![CDATA[<p>More on my experiments with <a href="https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/">silly Punycode domain names</a>.</p>

<p><span style="font-size:1.5em; font-family:monospace;">http://↑↑↓↓←→←→ba.tk/</span></p>

<p>Yup, copy and paste that into your browser and it will resolve.<span id="more-44415"></span>
<ins datetime="2025-01-23T08:34:53+00:00">Update: The free .tk domain service no longer works.</ins></p>

<p>For now, it just redirects to a Wikipedia article. If you can think of a better use for it, please let me know. I wonder how mail clients do at sending emails to it?</p>

<p>Interestingly, Chrome sometimes throws up a warning that this is a "Fake Site" saying "Attackers sometimes mimic sites by making small, hard-to-see changes to the URL." I suspect that's because of the mixture of English characters and symbols.</p>

<p>I was inspired by the (slightly weird) <a href="https://web.archive.org/web/20190314230729/http://xn--65g.tk/"></a><a href="http://↓.tk">http://↓.tk</a> website.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=44415&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/01/konami-code-domain-name/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Naming things is hard - DNS for the Federated Web]]></title>
		<link>https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/</link>
					<comments>https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 27 Dec 2022 12:34:27 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[fediverse]]></category>
		<category><![CDATA[mastodon]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44324</guid>

					<description><![CDATA[How should I design my personal DNS for all the cool new Federated Services and IndieWeb protocols?  Way back in the early 2000s, I started this website - shkspr.mobi. A few years later, I added a blog.  I could have used the main domain, or created a subdomain like blog.shkspr.mobi. In the end, I chose a subdirectory of shkspr.mobi/blog  I don&#039;t know if that was the right choice back then, but…]]></description>
										<content:encoded><![CDATA[<p>How should I design my personal DNS for all the cool new Federated Services and IndieWeb protocols?</p>

<p>Way back in the early 2000s, I started this website - <code>shkspr.mobi</code>. A few years later, I added a blog.  I could have used the main domain, or created a subdomain like <code>blog.shkspr.mobi</code>. In the end, I chose a subdirectory of <code>shkspr.mobi/blog</code></p>

<p>I don't know if that was the right choice back then, but it is looking like the wrong choice now.</p>

<p>I want to be a "first class" citizen of the Fediverse. I want a dozen different apps installed on my little slice of the Internet.  I want a fairly consistent online identity. What's the best way to do that?</p>

<h2 id="buy-a-new-domain-for-every-app"><a href="https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/#buy-a-new-domain-for-every-app">Buy a new domain for every app!</a></h2>

<p>No.  This is impractical for two reasons.</p>

<ol>
<li>It's expensive.</li>
<li>Nothing ties together <code>my_awesome_photos.biz</code> to <code>read_my_blog.com</code>.</li>
</ol>

<h2 id="subdirectories"><a href="https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/#subdirectories">Subdirectories</a></h2>

<p>I currently have <code>/blog</code>.  Should I also have <code>/mastodon</code> and <code>/pixelfed</code> and <code>/yet_another_cool_service</code> and...</p>

<p>Maybe? The problem is, most of these new services assume that they're going to be on their own domain.  Usernames are based on domains - so I guess I'd end up with <code>@edent-mastodon@shkspr.mobi</code> and <code>@edent-pixelfed@shkspr.mobi</code>? That just looks ugly.</p>

<h2 id="subdomains"><a href="https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/#subdomains">Subdomains</a></h2>

<p>Adding sub-domains is free and easy.</p>

<p><code>mastodon.shkspr.mobi</code> and <code>pixelfed.shkspr.mobi</code> - done!</p>

<p>But there are a couple of issues.</p>

<ol>
<li>Do I want to name them after the app, or something more generic in case I switch later? Perhaps <code>posts.shkspr.mobi</code> and <code>pictures.shkspr.mobi</code>?</li>
<li>Do users understand that they need to follow <code>@edent@location.shkspr.mobi</code> for my Foursquare-style check-ins and <code>@edent@beer.shkspr.mobi</code> for my beer reviews?</li>
</ol>

<h2 id="one-domain-to-rule-them-all"><a href="https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/#one-domain-to-rule-them-all">One Domain To Rule Them All</a></h2>

<p>Perhaps I'll just have everything on my main domain?  That <em>also</em> comes with a few problems! I'll need to install the apps <em>somewhere</em> and then work out how to redirect users to the correct app based on... what? And it still doesn't resolve the username issue.</p>

<h2 id="just-treat-everything-as-a-single-activitypub-feed"><a href="https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/#just-treat-everything-as-a-single-activitypub-feed">Just treat everything as a single ActivityPub feed</a></h2>

<p>I <em>think</em> this is where I'm heading.</p>

<p>I've written before about <a href="https://shkspr.mobi/blog/2020/04/how-id-redesign-twitter-and-why-it-wont-work/">my perfect social network</a>.</p>

<ul>
<li>I post items tagged <code>work</code>, <code>tech</code>, <code>sport</code>, <code>politics</code>, etc.</li>
<li>You decide which of those channels you want to subscribe to.</li>
</ul>

<p>If you <em>only</em> want to read my sport punditry, subscribe to that channel. If you want everything <em>except</em> my political views, ignore that specific channel.</p>

<p>I could publish everything on a single feed. It is then up to you or your client to work out how to filter that.</p>

<p>I'm still not sure <em>how</em> that would work! Perhaps clients will be smart enough to ignore statuses which don't fit their model? Perhaps users will manually choose what to follow?</p>

<p><a href="https://aaronparecki.com/2018/04/20/46/indieweb-reader-my-new-home-on-the-internet">That's sort of how Aaron Parecki's unified view works</a>.</p>

<h2 id="what-would-you-do"><a href="https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/#what-would-you-do">What would you do?</a></h2>

<p>If you've done this successfully - or have particularly strong opinions - please let me know!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=44324&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/12/naming-things-is-hard-dns-for-the-federated-web/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Some more silly Punycode domain names]]></title>
		<link>https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/</link>
					<comments>https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 04 Dec 2022 12:34:45 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[punycode]]></category>
		<category><![CDATA[unicode]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43953</guid>

					<description><![CDATA[You know how it is, you buy one silly domain name and then you get an idea for loads more!  A few weeks ago, I got https://⏻.ga/ - I think I&#039;m the first person to get a domain name which uses a glyph from the Miscellaneous Symbols Unicode block. How exciting!  And that got me wondering… what other abuses of the Punycode algorithm can I whack into DNS?  Well, here&#039;s some I whipped up using FreeNom …]]></description>
										<content:encoded><![CDATA[<p>You know how it is, you buy one silly domain name and then you get an idea for loads more!  <a href="https://shkspr.mobi/blog/2022/11/not-quite-emoji-domain-names/">A few weeks ago, I got </a><a href="https://⏻.ga/</a>">https://⏻.ga/</a> - I think I'm the first person to get a domain name which uses a glyph from the Miscellaneous Symbols Unicode block. How exciting!</p>

<p>And that got me wondering… what other abuses of the <a href="https://www.punycoder.com/">Punycode</a> algorithm can I whack into DNS?  Well, here's some I whipped up using <a href="https://my.freenom.com/">FreeNom</a> - they offer free domain names on the .ga TLD (and a few others) and are <em>very</em> liberal in accepting Punycode domains.</p>

<h2 id="theres-millions-of-domains-all-under-one-roof"><a href="https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/#theres-millions-of-domains-all-under-one-roof">There's millions of domains all under one roof</a></h2>

<p>For some reason, the children's retailer "Toys 'R' Us" uses a backwards R in their logo. Presumably because they think kids are stupid and don't know how to form letters.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/11/TRU_logo.png" alt="The logo for Toys Are Us." width="323" height="89" class="aligncenter size-full wp-image-43955">

<p>Or, maybe they're big fans of the <a href="https://graphemica.com/%E1%B4%99">reversed letter <strong>ᴙ</strong></a>?  Either way, Punycode supports that!</p>

<p>I present to you:</p>

<p><span style="font-size:2em;"><a href="https://web.archive.org/web/20230123014124/https://xn--toysus-l35b.ga/">https://<span style="color:red">T</span><span style="color:orange">o</span><span style="color:green">y</span><span style="color:red">s</span><span style="color:blue">ᴙ</span><span style="color:green">U</span><span style="color:red">s</span>.ga/</a></span></p>

<p>Yup! Copy and paste that and it'll work.  Webkit based browsers should show the ᴙ in the URl bar - others might show Punycode.</p>

<p>NB: This is <em>not</em> the <a href="https://graphemica.com/%D1%8F">Cyrillic ya</a> - it is, instead, a <a href="https://en.wikipedia.org/wiki/Uralic_Phonetic_Alphabet#Consonants">homoglyph</a>.</p>

<h2 id="touch-a-touch-a-touch-a-touch-me"><a href="https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/#touch-a-touch-a-touch-a-touch-me">Touch a Touch a Touch a Touch Me</a></h2>

<p>I <em>think</em> this is the world's first domain name written in Braille.</p>

<p><span style="font-size:2em;"><a href="https://web.archive.org/web/20221205175308/https://xn--9iii1c8a.ga/">https://⠠⠃⠗⠇.ga</a></span></p>

<p>That uses <a href="https://www.rnib.org.uk/living-with-sight-loss/education-and-learning/braille-tactile-codes/braille-codes/unified-english-braille-ueb/">Unified English Braille</a> - with <a href="https://www.rnib.org.uk/living-with-sight-loss/education-and-learning/braille-tactile-codes/contracted-grade-2-braille-explained/">a Grade Two contraction</a>.</p>

<p>Interestingly, I couldn't get any browser to display Braille in the URl bar. The other domains on this page work - but this one just gave the Punycode representation <code>xn--9iii1c8a.ga</code></p>

<h2 id="these-domains-go-up-to-11"><a href="https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/#these-domains-go-up-to-11">These domains go up to 11</a></h2>

<p>Without a doubt, the loudest band in rock and/or roll are the legendary "Spın̈al Tap" - note the dotless I and the heavy-metal umlaut over the N.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/11/tap.jpeg" alt="The logo for the band Spinal Tap. The logo looks like it has been chiselled out of heavy metal by virgin nuns who only wish to please the gods of rock and roll." width="474" height="247" class="aligncenter size-full wp-image-43962">

<p>Again, Punycode supports that!</p>

<p><a href="https://web.archive.org/web/20230123014133/https://sp%C4%B1n%CC%88altap.ga/"><span style="font-size:2em;color:silver;background:black;border-radius:0;">https://Spın̈alTap.ga/</span></a></p>

<p>Interestingly, this was the only domain that Firefox displayed without converting to Punycode.</p>

<h2 id="some-kind-of-einstein"><a href="https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/#some-kind-of-einstein">Some kind of Einstein</a></h2>

<p>This one combines another trick. As I pointed out in my post about <a href="https://shkspr.mobi/blog/2020/08/buying-a-single-character-domain-and-3-character-fqdn-for-15/">buying a single character domain name</a>, we can abuse Unicode normalisation in our domain names.  So the Unicode Superscript block gets automatically converted to regular text.</p>

<p>This means we can have a domain of:</p>

<p><span style="font-size:2em;"><a href="https://web.archive.org/web/20230123014120/https://e%EA%9E%8Amc%C2%B2.ga/">https://e꞊mc².ga/</a></span></p>

<p>The "equals" is really "modifier letter short equals sign (U+A78A)" which, surprisingly, doesn't undergo normalisation.</p>

<h2 id="what-didnt-work"><a href="https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/#what-didnt-work">What didn't work</a></h2>

<p>It's always good to share the experiments which didn't produce anything useful. Negative results are results too!</p>

<ul>
<li><a href="https://www.zalgo.org/">Zalgo Text</a> doesn't work.</li>
<li>🂡 and other playing cards don't work.</li>
<li>I figured trying to use something like <code>xn--hsbccom-oy9d61a</code> would probably get me banned from the Internet pretty quickly!</li>
<li>This didn't open up a portal to the Dark Dimension from which all madness stems. Oh well.</li>
</ul>

<h2 id="up-next"><a href="https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/#up-next">Up next?</a></h2>

<p>If you manage to generate any weird and wonderful domain names, please leave a comment.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43953&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/12/some-more-silly-punycode-domain-names/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[What's the cheapest domain you can register for 10 years?]]></title>
		<link>https://shkspr.mobi/blog/2022/09/whats-the-cheapest-domain-you-can-register-for-10-years/</link>
					<comments>https://shkspr.mobi/blog/2022/09/whats-the-cheapest-domain-you-can-register-for-10-years/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 09 Sep 2022 11:34:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[tld]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43463</guid>

					<description><![CDATA[I&#039;m concerned about the longevity of the domains I register. I want my domains to be available for as long as possible. But it seems that every year prices rise - and the discount often provided for a new domain rarely continues into subsequent years.  So I recently started renewing them for as long as possible. It turns out that most domains can be registered for a maximum of 10 years.  A…]]></description>
										<content:encoded><![CDATA[<p>I'm concerned about the longevity of the domains I register. I want my domains to be available for as long as possible. But it seems that every year prices rise - and the discount often provided for a new domain rarely continues into subsequent years.</p>

<p>So I recently started renewing them for as long as possible. It turns out that most domains can be registered for a maximum of 10 years<sup id="fnref:ten"><a href="https://shkspr.mobi/blog/2022/09/whats-the-cheapest-domain-you-can-register-for-10-years/#fn:ten" class="footnote-ref" title="Do let me know if there are exceptions to this rule which are available to the general public." role="doc-noteref">0</a></sup>.</p>

<p>A typical <code>.uk</code> domain will set you back the thick end of a hundred quid if you want it for a decade! Can I find something cheaper?</p>

<p>There are some free domain services like <a href="https://freenom.com/">freenom.com</a>. They'll give you a <code>.ml</code> domain for free. But you'll have to log in every year if you want to renew it. And, as I recently found out, they will sometimes just take away your free name and try to charge you for it.</p>

<p>Similarly, <a href="https://nic.ua/en/domains/.pp.ua"><code>.pp.ua</code> offers free domains to people in Ukraine</a>. They can only be registered for a single year at a time though.</p>

<p>If you want a Top Level Domain which you <em>can</em> renew for a decade, the cheapest appears to be <a href="http://www.nic.feedback/"><code>.feedback</code></a> which costs a smidge under £13 for 10 years.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/08/Screenshot-2022-08-25-at-18-13-44-My-Cart.png" alt="Screenshot showing £12.80 for 10 years." width="497" height="462" class="aligncenter size-full wp-image-43468">

<p>But, of course, there is a catch! You have to <a href="https://web.archive.org/web/20220913054217/http://www.eggsample.feedback/reviews">use the <code>.feedback</code> website hosting service</a> which, frankly, looks rubbish.
<a href="http://www.eggsample.feedback/reviews"><img src="https://shkspr.mobi/blog/wp-content/uploads/2022/08/eggsample.png" alt="Screenshot of a review website. It looks cheap and nasty." width="1023" height="731" class="aligncenter size-full wp-image-43465"></a></p>

<p>It doesn't seem to be receiving any updates. I've tried contacting them to see if any improvements are planned, but didn't receive a reply. You can't set your own nameservers, nor can you add MX records or anything useful like that.</p>

<p>The cheapest fully functional domain which you can register for a decade appears to be <a href="https://www.sav.com"><code>.cyou</code> from Sav.com</a> at about £23 (US$27.60).</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/08/Screenshot-2022-08-25-at-18-02-42-Your-Cart.png" alt="Screenshot showing the domain cost at sav.com." width="675" height="309" class="aligncenter size-full wp-image-43466">

<p>Up next is <a href="https://porkbun.com/checkout/search?q=asdfsdadsfadsf.stream"><code>.stream</code> from Porkbun</a> - you can buy a 10 year domain for ~£30 (US$35.60).</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/08/Screenshot-2022-08-25-at-18-05-31-porkbun.com-An-oddly-satisfying-experience.png" alt="Screenshot showing the price." width="937" height="335" class="aligncenter size-full wp-image-43467">

<p>As pointed out on the <a href="https://news.ycombinator.com/item?id=32797286#32799446">HackerNews discussion</a> on this post, you can <a href="https://www.dynadot.com/domain/in.html">register a <code>.in</code> domain for 10 years for £37</a>.</p>

<p>So, there you have it. For between £23 - £40 you can buy a <em>useful</em> domain name which will stay registered to you for a decade. If you can find anything cheaper - please let me know in the comments.</p>

<p>Of course, paying for <em>hosting</em> for a decade is a different matter!</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:ten">
<p>Do let me know if there are exceptions to this rule which are available to the general public.&nbsp;<a href="https://shkspr.mobi/blog/2022/09/whats-the-cheapest-domain-you-can-register-for-10-years/#fnref:ten" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43463&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/09/whats-the-cheapest-domain-you-can-register-for-10-years/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[DNS Esoterica: BIMI - SVG in DNS TXT WTF?!]]></title>
		<link>https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/</link>
					<comments>https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 01 Aug 2022 11:34:24 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43112</guid>

					<description><![CDATA[You&#039;ve been on the Internet a long time, right? Of course you know what BIMI is. All the cool kids do. But, for those of you who aren&#039;t hip to the jive of the Infobahn...  BIMI (Brand Indicators for Message Identification) is a new standard that can curb the issue of online impersonators. ... BIMI is a new standard that enables you to include your company’s logo alongside the emails you send. T…]]></description>
										<content:encoded><![CDATA[<p>You've been on the Internet a long time, right? Of course <em>you</em> know what BIMI is. All the cool kids do. But, for those of you who aren't hip to the jive of the Infobahn...</p>

<blockquote><p>BIMI (Brand Indicators for Message Identification) is a new standard that can curb the issue of online impersonators. ... BIMI is a new standard that enables you to include your company’s logo alongside the emails you send. That way, your brand stands out among other emails, and your customers are sure that the emails are legitimate.</p>

<p><a href="https://www.dmarcanalyzer.com/bimi/how-to-create-a-bimi-record/">How To Create a BIMI record</a></p></blockquote>

<p>Wow! Much innovation! Such security! There's no way a fraudster could put a bank's logo on their dodgy spam, right?</p>

<p><em>*sigh*</em></p>

<p>OK, so in order for this not to be abused, most email providers require brands to pay for an expensive <a href="https://support.google.com/a/answer/10911028">Verified Mark Certificate (VMC)</a> - a digital certificate which says that you are the trademark owner of the logo.</p>

<p>How much does it cost?</p>

<p><strong>US$1,499.00</strong></p>

<p>Per <em>year</em>!  No wonder no one is using BIMI.</p>

<p>Then it's just a case of sticking something like this in your DNS <code>TXT</code> records:</p>

<pre><code class="language-txt">v=BIMI1;
l=https://example.com/logo.svg;
a=https://example.com/certificate.pem
</code></pre>

<p>That's nice, and all, but I don't think I've ever seen one in the wild. Even the BIMI Group <a href="https://bimigroup.org/bimi-generator/">haven't bothered paying for the VMC</a>!</p>

<p>One of the few organisations who <em>have</em> set this up correctly is DigiCert.  Because they're one of the orgs you can buy this service from.</p>

<p><code>dig txt default._bimi.digicert.com</code> will get you:</p>

<pre><code class="language-txt">;; ANSWER SECTION:
default._bimi.digicert.com. 3600 IN TXT 
   "v=BIMI1; 
    l=https://www.digicert.com/resources/DigiCertLogo_WhiteOnBlue.svg; 
    a=https://cacerts.digicert.com/digicert_com_vmc_WhiteOnBlue.pem"
</code></pre>

<p>You can read the <a href="https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/">PEM certificate</a> using:
<code>openssl x509 -in digicert_com_vmc_WhiteOnBlue.pem -noout -text</code></p>

<p>Inside, you'll find this nugget:</p>

<p><code>data:image/svg+xml;base64,H4sIAAAAAAAACo1XXW/jRhJ8tn8FwzwF4NDzzaFhb3BRckmADRAgwL4eHFoxhePZhqiVN/…</code></p>

<p>Hmmm… <a href="https://blog.dotnetframework.org/2016/12/07/h4siaaa-whats-so-important-about-this-string/"><code>H4sIAAA</code> is the start of a base64 encoded zipped string</a>.</p>

<p>Once decoded and unzipped, we find… the SVG logo!</p>

<p>It's fairly obvious that people want a nice logo next to their email in your inbox. If you're on GMail, you're probably used to seeing your friends faces smiling back at you. But that only works if everyone is on the same email system. So BIMI is a reasonable idea for a cross-provider standard.</p>

<h2 id="downsides"><a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/#downsides">Downsides</a></h2>

<p>There are several problems with BIMI.</p>

<p>The first is cost. If it were free then <code>AbsolutelyYourBank@trust_me.biz</code> could use the HSBC logo with impunity. I'm sure an extremely dedicated fraudster could spend the $1.5k and fool DigiCert into certifying their illegitimate use of someone else's logo. But it's unlikely to happen.</p>

<p>There's also a privacy issue. Because the BIMI logos are stored on a website, the website owner could track when they were downloaded and use that to work out who was reading their emails. Thankfully, both GMail and Yahoo proxy the images - so the provider doesn't get any additional analytics benefit.</p>

<p>Support is poor in GMail. Here's an email from LinkedIn:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/07/LinkedIn.png" alt="Screenshot of an email." width="507" height="276" class="aligncenter size-full wp-image-43225">
As you can see, the BIMI logo is displayed by the email address - but is absent in the contact view.</p>

<p>Finally, DNS <code>TXT</code> records are limited to 255 bytes of data. That's why logos are restricted to being (fairly short) links.</p>

<h2 id="is-it-worth-it"><a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/#is-it-worth-it">Is it worth it?</a></h2>

<p>I think the marketplace of ideas has answered this with a fairly resounding "no".</p>

<p>You can <a href="https://bimiradar.com/glob">track adoption at BIMIBRadar</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/08/bimiradar_1.png" alt="graph showing less that 0.001% of domains have adopted BIMI." width="1023" height="767" class="aligncenter size-full wp-image-43237">

<p>It would be great to stick your face, logo, or picture next to every email you send. But the risk from fraudsters is just too high.</p>

<p>The cost of certification is necessary to stop misuse - but that also means that smaller brands and individuals are locked out.  Which isn't what we want from an open Internet.</p>

<p>There's no worldwide brand registry which can certify your use of an image. And, even if there were, it would be a huge single-point-of-failure.</p>

<p>The <a href="https://mailarchive.ietf.org/arch/browse/bimi/">conversation about BIMI chugs on in IETF mailing lists</a>. Do get involved if you think you have something of value to add.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43112&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[DNS Esoterica - Why you can't dig Switzerland]]></title>
		<link>https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/</link>
					<comments>https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 14 Jul 2022 11:34:18 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[trivia]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43028</guid>

					<description><![CDATA[As part of my new job, I&#039;m learning a lot more about the mysteries of the Domain Name System than any mortal should know I thought possible.  The humble unix dig command allows you to query all sort of DNS information. For example, to see name server records for the BBC website, you can run:  dig bbc.co.uk NS  Which will get you:  ;; Got answer: ;; -&#62;&#62;HEADER&#60;&#60;- opcode: QUERY, status: NOERROR, id: …]]></description>
										<content:encoded><![CDATA[<p>As part of my new job, I'm learning a lot more about the mysteries of the Domain Name System than <del>any mortal should know</del> I thought possible.</p>

<p>The humble unix <code>dig</code> command allows you to query all sort of DNS information. For example, to see name server records for the BBC website, you can run:</p>

<p><code>dig bbc.co.uk NS</code></p>

<p>Which will get you:</p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 35614
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 17

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 097db2ee4c92b84982083ecf62b5b5f2007906e616035113 (good)
;; QUESTION SECTION:
;bbc.co.uk.         IN  NS

;; ANSWER SECTION:
bbc.co.uk.      900 IN  NS  ddns1.bbc.com.
bbc.co.uk.      900 IN  NS  dns0.bbc.co.uk.
bbc.co.uk.      900 IN  NS  ddns1.bbc.co.uk.
...
</code></pre>

<p>And a whole lot more.  But you can go further down the DNS tree. What are the nameservers for <code>.co.uk</code>?</p>

<p><code>dig co.uk NS</code></p>

<p>And you'll get your answer.  You can go one further and see the nameservers for the Top Level Domain:</p>

<p><code>dig uk NS</code></p>

<p>Which replies with:</p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 54061
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 17

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 880427eda8ff71de2ab4f43862b5b65f95e317d29cc10a8e (good)
;; QUESTION SECTION:
;uk.                IN  NS

;; ANSWER SECTION:
uk.         159692  IN  NS  nsc.nic.uk.
uk.         159692  IN  NS  dns1.nic.uk.
uk.         159692  IN  NS  nsd.nic.uk.
...
</code></pre>

<p>And that works with <em>every</em> TLD. Countries like <code>de</code>, generic names like <code>museum</code>, and internationalised domains like <code>在线</code>. All of them work!</p>

<p>Except Switzerland.</p>

<p>Switzerland's country code is <code>ch</code> - after the name <i lang="la">Confoederatio Helvetica</i>. Let's run the <code>dig</code> on it: <code>dig ch NS</code></p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: REFUSED, id: 31910
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
</code></pre>

<p>We have been <strong>refused</strong> and <strong>warned</strong>.  But why does this only happen with Switzerland?</p>

<p>The blame - as with most modern ills - lies in the mid-1970s. The Bee Gees were storming the charts with "Jive Talkin'", the Rocky Horror Picture Show was gathering a cult following, and MIT scientists were causing chaos.  Literally.</p>

<p><a href="https://en.wikipedia.org/wiki/Chaosnet">Chaosnet</a> was an early network protocol designed for local networks.  It was technically very clever but, sadly, never really took off.</p>

<p>However, it found its way into DNS records. Let's go back to the answer to <code>dig bbc.co.uk NS</code>:</p>

<pre><code class="language-_">;; ANSWER SECTION:
bbc.co.uk.      900 IN  NS  ddns1.bbc.com.
</code></pre>

<p>OK, the first part is the domain name. The number is the TTL. The <code>IN</code> is the class. The NS says this is a nameserver record. And, finally, we get the domain of the nameserver.</p>

<p>But, in the class, what does <code>IN</code> stand for?</p>

<p>"<strong>Internet</strong>", obviously. Wait... Isn't the DNS on the Internet? Why do we need to specify that these DNS records are for Internet?</p>

<p>Well, isn't it obvious? Because you might want records of a <em>different</em> network. Like, for example, Chaosnet.</p>

<p>And if Internet is abbreviated to <code>IN</code>, what is Chaosnet shortened to? That's right! <code>CH</code>.</p>

<p>So, <code>dig</code> sees you enter <code>ch</code> for Switzerland, but thinks you're asking about <code>CH</code> for Chaosnet. And so it fails.</p>

<p>In order to query the records for <code>ch</code> we need to provide an absolutely fully-qualified domain name. It's as simple as sticking a dot at the end of the domain name:</p>

<p><code>dig ch. NS</code></p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 64932
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 11

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: e19b9c23cdfa0f7bcf82750462b5c16b47744386c7974ffb (good)
;; QUESTION SECTION:
;ch.                IN  NS

;; ANSWER SECTION:
ch.         164894  IN  NS  e.nic.ch.
ch.         164894  IN  NS  a.nic.ch.
ch.         164894  IN  NS  f.nic.ch.
</code></pre>

<p>And there we go. A failed 1970s experiment like bell-bottoms and Betamax videos - but with much longer lasting consequences.</p>

<p>You can see some <code>CH</code> records by running like:</p>

<p><code>dig ch txt @f.root-servers.net version.bind</code></p>

<p>That will get you something like:</p>

<pre><code class="language-_">;; ANSWER SECTION:
version.bind.       86400   CH  TXT "cloudflare-f-root-20190930"
</code></pre>

<p>Of course, DNS doesn't <em>only</em> have <code>IN</code> and <code>CH</code> class records.</p>

<p>There's also <a href="https://en.wikipedia.org/wiki/Hesiod_(name_service)">Hesiod</a> - <code>HS</code>. But you already knew that, right...?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43028&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[🔥.me.ss! You can't register emoji domains in South Sudan]]></title>
		<link>https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/</link>
					<comments>https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 25 Jul 2021 11:23:07 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[emoji]]></category>
		<category><![CDATA[punycode]]></category>
		<category><![CDATA[unicode]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=39635</guid>

					<description><![CDATA[It&#039;s useful to share negative results. Not every experiment has an amazing or successful outcome.  tl;dr you can&#039;t register Punycode .ss domains.  This also means Internet users in South Sudan can&#039;t register domains using their own writing system.  Background  The Republic of South Sudan became independent and joined the United Nations back in 2011. A decade later, and it&#039;s now possible to…]]></description>
										<content:encoded><![CDATA[<p>It's useful to share negative results. Not every experiment has an amazing or successful outcome.</p>

<p>tl;dr you can't register Punycode <code>.ss</code> domains.</p>

<p>This also means Internet users in South Sudan can't register domains using <a href="https://en.wikipedia.org/wiki/Nuer_language">their own writing system</a>.</p>

<h2 id="background"><a href="https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/#background">Background</a></h2>

<p>The Republic of South Sudan became independent and joined the United Nations back in 2011. A decade later, and it's now possible to register <code>.ss</code> domains.</p>

<p>Partly due to <a href="https://www.theregister.com/2019/01/24/south_sudan_nazi_domain/">the history of the letters SS</a>, and partly because of the way domains are usually organised, you cannot register a <code>.ss</code> domain directly. You can have <code>.com.ss</code>, <code>.edu.ss</code>, <code>.biz.ss</code>, <code>.sch.ss</code>, <code>.gov.ss</code>, <code>.net.ss</code>, and - my new favourite - <code>.me.ss</code>!</p>

<p>This allows for some interesting <a href="https://en.wikipedia.org/wiki/Domain_hack">domain hacks</a>.  Perhaps host a recipe page for <a href="https://www.bbcgoodfood.com/recipes/eton-mess">Eton Mess</a>? Or complain about trash at <code>your_town.me.ss</code>?</p>

<p>I was looking at <code>hot.me.ss</code> - but someone already snapped that up.  However, the registrar said they allowed Punycode registration. Which means... <strong>EMOJI DOMAINS!</strong></p>

<p>So, for €24, <a href="https://www.afriregister.com/">Afriregister.com.ss</a> sold me...</p>

<h2 id="%f0%9f%94%a5-me-ss"><a href="https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/#%f0%9f%94%a5-me-ss">🔥.me.ss</a></h2>

<p>For the Punycode minded among you, that's <code>xn--4v8h.me.ss</code></p>

<h2 id="the-process"><a href="https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/#the-process">The process</a></h2>

<p>This wasn't quite as simple as I hoped. There are several registries which claim to support <code>.me.ss</code> - but halfway through the process, they'd decide that they couldn't register it.  Some of the registrars outside of Africa wanted extortionate prices for domains. But <a href="https://afriregister.com.ss/">Afriregister.com.ss</a> were relatively cheap and hassle-free.  They let you pay via PayPal.</p>

<p>Domains have to be approved. There is a <a href="https://web.archive.org/web/20210814161202/https://nic.ss/download/reserved_restricted_premium_list/?ind=1613781801187&amp;filename=Reserved_Restricted_Premium_List.pdf&amp;wpdmdl=2330&amp;refresh=6115fae57e99b1628830437">long list of banned terms</a>. Some of those restrictions are very specific to the people of South Sudan - so it is worth reading.</p>

<h2 id="the-failure"><a href="https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/#the-failure">The failure</a></h2>

<p>The registration still hadn't completed after 12 hours. So the next day I chatted to the registrar.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/07/Screenshot-from-2021-07-21-09-58-24.png" alt="Dear Terence, We have contacted the registry and they said they don't allow 2 successive dashes." width="431" height="103" class="aligncenter size-full wp-image-39652">

<p>Damnit!</p>

<p>Looking more closely at <code>nic.ss</code>'s registration policies, they say</p>

<blockquote><p>4.1 All .SS Domain Names MUST have a minimum of THREE (3) characters. 
4.2  All .SS Domain Names should not have more than 63 characters. 
4.3  All .SS Domain Names should have a syntax pattern of [a-z 0-9].</p></blockquote>

<p>It didn't explicitly allow or deny hyphens - so I thought I'd risk it.</p>

<p>Oh well, that would have been fun if it worked.</p>

<p>As I said, it's important to publish about things which don't work. It stops other people from wasting their time on futile pursuits.</p>

<p>So, I've now got credit with the registrar. What .me.ss domain should I get?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=39635&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA["Advanced Network Error Search" - how to turn off Virgin's least helpful service]]></title>
		<link>https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/</link>
					<comments>https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 02 Mar 2021 12:30:58 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[gdpr]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[virgin]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=38116</guid>

					<description><![CDATA[tl;dr you have to keep complaining to Virgin for several months and then take them to the Communication &#38; Internet Services Adjudication Scheme then complain to their Data Protection team by contacting them on LinkedIn.  Background  Virgin have a spammy DNS hijacking service. If you accidentally misspell a domain - for example example.coom - Virgin will pretend that the domain exists and serve…]]></description>
										<content:encoded><![CDATA[<p>tl;dr you have to keep complaining to Virgin for several months and then take them to the <a href="https://www.cedr.com/cisas">Communication &amp; Internet Services Adjudication Scheme</a> then complain to their Data Protection team by contacting them on LinkedIn.</p>

<h2 id="background"><a href="https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/#background">Background</a></h2>

<p>Virgin have a spammy DNS hijacking service. If you accidentally misspell a domain - for example <code>example.coom</code> - Virgin will <em>pretend</em> that the domain exists and serve you up an advertising page.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/adverts-fs8.png" alt="Screenshots showing adverts next to my mispelled domain." width="1024" height="988" class="aligncenter size-full wp-image-38234">

<p>Yahoo powered! Yeuch! This means my data is sent to these advertisers without consent.</p>

<p>For the technically minded, the Virgin Media DNS should return <code>NXDOMAIN</code> instead it fraudulently returns <code>NOERROR</code> and redirects the user to the spam site.</p>

<p>Don't worry, there's a link to switch off the service.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/Screenshot_2020-11-19-Advanced-Network-Error-Search.png" alt="Website saying the service is already off." width="762" height="460" class="aligncenter size-full wp-image-38233">

<p>But it is broken. It always says "the advanced network error search is already switched off."</p>

<p><a href="https://twitter.com/search?q=advanced%20network%20error%20search%20virginmedia&amp;src=typed_query&amp;f=live">Lots of people report having this problem</a> but Virgin don't have an official fix for it.  It <em>is</em> possible to change your devices' DNS servers - but it is impossible to change the DNS on the SuperHub.  But, frankly, you shouldn't have to. Virgin should provide a proper DNS service.</p>

<p>So, here's how I got them to fix it. I hope this works for you too.</p>

<h2 id="raise-a-complaint"><a href="https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/#raise-a-complaint">Raise a complaint</a></h2>

<p>I <a href="https://web.archive.org/web/20210302164154/https://community.virginmedia.com/t5/Networking-and-WiFi/Turn-off-Advanced-network-error-search/m-p/4523734">raised an issue in the community forums</a>. That's generally the best way to get in touch with the UK-based support team.</p>

<p>Eventually someone contacted me there and I was able to explain the issue.  They started raising it with their IT team.  But were unable to fix it.</p>

<p>I also <a href="https://www.virginmedia.com/shop/contactus/make-a-complaint">raised a complaint directly with Virgin's complaints team</a>.</p>

<p>After two months of being ignored, lied to, and misdirected - I asked for a <a href="https://www.which.co.uk/consumer-rights/letter/letter-of-deadlock-request-before-going-to-the-ombudsman">Deadlock Letter</a>. That allows you to make a complaint to the dispute resolution service.</p>

<p>Sadly, Virgin refused to issue a Deadlock. But as it had been longer than eight weeks, I was able to complain directly vis <a href="https://www.cedr.com/consumer/cisas/"></a><a href="https://www.cedr.com/consumer/cisas/">https://www.cedr.com/consumer/cisas/</a>.</p>

<p>A couple of weeks later, I got a notification that my complaint had been accepted by CISAS. By <em>complete coincidence</em> I received a phone call from Virgin <em>the exact same day</em> offering me a solution!</p>

<p>Apparently the only way to change this setting was for Virgin to delete my customer account and rebuild it from scratch.  Yup, their solution was to literally turn my account off then on again.  Their only other option was to release me from my contract without penalty. As they're the only fibre provider near me, I let them switch me off for a couple of hours.</p>

<p>It didn't work.</p>

<h2 id="the-data-protection-angle"><a href="https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/#the-data-protection-angle">The Data Protection Angle</a></h2>

<p>I reckoned that if Virgin were sending my browsing data to a 3rd party without my consent, that was a GDPR issue. So I emailed <a href="https://www.virginmedia.com/shop/the-legal-stuff/privacy-policy">Virgin's Data Protection team</a> saying:</p>

<blockquote><p>Virgin Media have forcibly enrolled my account into their "Advanced Network Error Search" service.</p>

<p>When I mistype a domain name, Virgin redirects me to an advertising service powered by Yahoo.</p>

<p>I would like to understand on what legal basis are you sharing my data with Yahoo and the advertising partners on the service.  I see no mention of it in <a href="https://www.virginmedia.com/shop/the-legal-stuff/privacy-policy">https://www.virginmedia.com/shop/the-legal-stuff/privacy-policy</a></p>

<p>As per your policy, I wish to assert the following rights:</p>

<ol start="5">
<li>The right to restrict processing</li>
</ol>

<p>I have repeatedly asked your technical team to remove me from the Advanced Network Error Search service. They have refused. I am therefore instructing you to restrict the processing of my data for the purposes of this service.</p>

<p>Please let me know your response by 1st March.</p></blockquote>

<p>I didn't hear back.</p>

<p>So I <a href="https://shkspr.mobi/blog/2019/02/abusing-linkedin-for-better-customer-service/">found their Head of Data Protection on LinkedIn</a> and politely asked him to take a look into it for me. He told me to email a generic address. I explained that I had already done so but received no reply, so he gave me his direct address.  I forwarded him the above, and got a swift reply saying they'd look into it.</p>

<p>A week later, I got a weird email saying my Web Safe Parental Controls had been changed.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/Screenshot_2021-02-23-Your-parental-control-settings-have-changed-KMM75919172V93858L0KM-terence-eden-shkspr-mobi-Shks....png" alt="     Hi,  We've noticed that your Web Safe parental control settings have recently been changed in your My Virgin Media account.   If you meant to do this, then please ignore this email. If not, then simply sign in to My Virgin Media go to &quot;My Apps&quot; and change them back.     If you think you need to change your password once you’ve signed in to My Virgin Media, just visit &quot;My Profile&quot;.     For more information check out Switched on Families our online &amp; interactive guide to keeping your kids safe online.     Kind regards." width="679" height="551" class="aligncenter size-full wp-image-38231">

<p>I hadn't changed them. But, obviously someone at Virgin had monkeyed around with my account - because the accursed Advanced Network Error Search had <strong>gone!!</strong></p>

<p>They phoned me shortly afterwards and confirmed that the issue had finally been resolved.</p>

<p>And all it took was three-months of complaining...</p>

<h2 id="compensation"><a href="https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/#compensation">Compensation</a></h2>

<p>Virgin offered a one month bill refund - £48 - by way of an apology.</p>

<p>In light of the months of arguing back-and-forth and the amount of time I wasted trying to get this fixed, I asked for £300 of compensation. Which they paid. (!!!!!!)</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/Screenshot_2021-02-25-My-Bills.png" alt="Bill adjustment showing refund." width="593" height="224" class="aligncenter size-full wp-image-38253">

<p>They separately also gave me bill credit for the delay in processing the case.</p>

<h2 id="what-have-we-learned"><a href="https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/#what-have-we-learned">What Have We Learned?</a></h2>

<p>Virgin media have shitty customer service. Their <a href="https://shkspr.mobi/blog/2018/08/virgin-media-dont-understand-unicode/">backend systems are antiquated and unreliable.</a> But they have fastest speeds in my area and low(ish) prices, so I'm stuck with them.</p>

<p>But, more importantly, the threat of GDPR is an <em>excellent</em> way to force companies to behave!</p>

<hr>

<h3 id="join-virgin-media-and-get-50-bill-credit"><a href="https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/#join-virgin-media-and-get-50-bill-credit">Join Virgin Media and get £50 bill credit</a></h3>

<p>If you fancy putting up with this sort of nonsense, <a href="http://aklam.io/rOTKz1">join Virgin Media and we both get £50</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=38116&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/03/advanced-network-error-search-how-to-turn-off-virgins-least-helpful-service/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Even Google forgets to renew its domains]]></title>
		<link>https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/</link>
					<comments>https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 14 Jan 2020 12:17:21 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=33237</guid>

					<description><![CDATA[tl;dr Google forgot to renew a domain used in their documentation. It was mildly embarrassing for them. And possibly a minor security concern for some new G-Suite domain administrators    Background  Choosing a good example domain, to use in documentation, is hard. You want something which is obviously an example, so that users understand they have to substitute it for their own details. But…]]></description>
										<content:encoded><![CDATA[<details open="">
  <summary><strong>tl;dr</strong></summary>
<ol><li>Google forgot to renew a domain used in their documentation.</li>
<li>It was mildly embarrassing for them.</li>
<li>And possibly a minor security concern for some new G-Suite domain administrators</li></ol>

</details>

<h2 id="background"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#background">Background</a></h2>

<p>Choosing a good example domain, to use in documentation, is hard. You want something which is obviously an example, so that users understand they have to substitute it for their own details. But it also needs to be a validly formatted domain, and shouldn't be used for anything important, and - most importantly - should be under your control.</p>

<p>In most of Google's domain documentation, they used <code>SpottedFig.org</code> - why? Who knows!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/GSuite-Admin-showing-the-domain-fs8.png" alt="GSuite Admin showing the domain." width="884" height="438" class="aligncenter size-full wp-image-33240">

<p>They used it across their support platform:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Lots-of-Google-pages-with-the-domain-in-them-fs8.png" alt="Lots of Google pages with the domain in them." width="893" height="611" class="aligncenter size-full wp-image-33242">

<p>Yet, for some reason, they didn't renew it when it expired a couple of months ago.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Domain-showing-as-available-to-purchase-fs8.png" alt="Domain showing as available to purchase." width="1212" height="414" class="aligncenter size-full wp-image-33244">

<p>So I bought it for £10. Cheap!</p>

<h2 id="security"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#security">Security</a></h2>

<p>Google's documentation said "To view DNS results for a domain already configured to use G Suite, enter spottedfig.org."</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Documentation-showing-the-domain-fs8.png" alt="Documentation showing the domain." width="667" height="495" class="aligncenter size-full wp-image-33243">

<p>As I now have control of the domain, I could have entered malicious DNS information and convinced people to use it. Perhaps redirecting their email to my servers.</p>

<h2 id="impact"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#impact">Impact</a></h2>

<p>Look, this isn't in the same league as <a href="https://www.linkedin.com/pulse/i-purchased-domain-googlecom-via-google-domains-sanmay-ved/">the chap who bought <code>Google.com</code> for $12</a>. This is a minor domain with probably zero traffic until I stumbled upon it. Looking in the Wayback Machine, it appears that the site never had any meaningful content.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Google-404-error-in-the-wayback-machine-fs8.png" alt="Google branded 404 error in the wayback machine." width="780" height="255" class="aligncenter size-full wp-image-33239"></p>

<p>Because Google specifically advised users to check the DNS entries of <code>SpottedFig.org</code>, I thought there was a minor security risk that Google users could be tricked into entering incorrect DNS information.  So I responsibly disclosed it to them.</p>

<p>Eventually, Google replaced <em>most</em> references to <code>SpottedFig</code> in their documentation. <a href="https://support.google.com/a/answer/2579951?hl=en">They inexplicably left this <code>.com</code> one though</a>:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/01/Screenshot_2020-01-07-Troubleshoot-A-records-G-Suite-Admin-Help.png" alt="Google help page." width="663" height="216" class="aligncenter size-full wp-image-33761">

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#timeline">Timeline</a></h2>

<ul>
<li>2019-11-29 Found the domain while reading the documentation close to midnight.</li>
<li>2019-11-30 Purchased the domain. Wrote a badly worded vulnerability report at 1am and sent to Google.</li>
<li>2019-12-02 Marked as "infeasible" by Google. So I wrote a better explanation. Essentially "Google tells G-Suite admins to use my domain as a template for configuration."</li>
<li>2019-12-03 Google reconsidered! Said it probably wasn't eligible for a bounty (drat!) but they'd evaluate it.</li>
<li>2019-12-11 I noticed that Google had rewritten its documentation. All references to <code>SpottedFig.org</code> were removed and replaced with a domain they control - <code>solarmora.com</code></li>
<li>2019-12-18 "As a part of our Vulnerability Reward Program, we decided that it does not meet the bar for a financial reward, but we would like to acknowledge your contribution to Google security in our <a href="https://bughunter.withgoogle.com/profile/daaf885b-933e-4425-8668-d44cca3bc0f1">Hall of Fame</a>"</li>
<li>2020-01-14 Published this blog post.</li>
</ul>

<h2 id="how-to-prevent-this-happening-to-you"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#how-to-prevent-this-happening-to-you">How to prevent this happening to you?</a></h2>

<p>I recommend using <a href="https://littlewarden.com/">Little Warden</a> to monitor your domains.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=33237&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Domain hacks with unusual Unicode characters]]></title>
		<link>https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/</link>
					<comments>https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 01 Nov 2018 12:00:54 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[punycode]]></category>
		<category><![CDATA[unicode]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=30483</guid>

					<description><![CDATA[Unicode contains a range of symbols which don&#039;t get much use. For example, there are separate symbols for TradeMark - ™, Service Mark - ℠, and Prescriptions - ℞.  Nestling among the &#34;Letterlike Symbols&#34; are two curious entries. Both of these are single characters:   Telephone symbol - ℡  Numero Sign - №   What&#039;s interesting is both .tel and .no are Top-Level-Domains (TLD) on the Domain Name System…]]></description>
										<content:encoded><![CDATA[<p>Unicode contains a range of symbols which don't get much use. For example, there are separate symbols for TradeMark - ™, Service Mark - ℠, and Prescriptions - ℞.</p>

<p>Nestling among the "Letterlike Symbols" are two curious entries. Both of these are single characters:</p>

<ul>
<li><a href="https://en.wiktionary.org/wiki/%E2%84%A1">Telephone symbol</a> - ℡ </li>
<li><a href="https://en.wiktionary.org/wiki/%E2%84%96">Numero Sign</a> - №</li>
</ul>

<p>What's interesting is both .tel and .no are Top-Level-Domains (TLD) on the Domain Name System (DNS).</p>

<p>So my contact site - <a href="https://edent.tel/">https://edent.tel/</a> - can be written as - <a href="https://edent.℡/">https://edent.℡/</a></p>

<p>And the Norwegian domain name registry NORID can be accessed at <a href="https://www.norid.№/">https://www.norid.№/</a></p>

<p>Copy and paste those links - they work in any browser!</p>

<h2 id="is-this-limited-to-tlds"><a href="https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/#is-this-limited-to-tlds">Is this limited to TLDs?</a></h2>

<p>No! This works ANYWHERE in a domain name. Copy and paste these examples:</p>

<ul>
<li>Script https://ℰ𝒳𝒜ℳ𝓟ℒℰ.𝒞𝓞ℳ/</li>
<li>Math Bold https://𝐞𝐱𝐚𝐦𝐩𝐥𝐞.𝐜𝐨𝐦/</li>
<li>Fraktur https://𝖊𝖝𝖆𝖒𝖕𝖑𝖊.𝖈𝖔𝖒/</li>
<li>Math bold italic https://𝒆𝒙𝒂𝒎𝒑𝒍𝒆.𝒄𝒐𝒎/</li>
<li>Math bold script https://𝓮𝔁𝓪𝓶𝓹𝓵𝓮.𝓬𝓸𝓶/</li>
<li>Double struck https://𝕖𝕩𝕒𝕞𝕡𝕝𝕖.𝕔𝕠𝕞/</li>
<li>Monospace https://𝚎𝚡𝚊𝚖𝚙𝚕𝚎.𝚌𝚘𝚖/</li>
<li>Super script https://ᵉˣᵃᵐᵖˡᵉ.ᶜᵒᵐ/</li>
<li>Sub script https://ₑₓₐₘₚₗₑ.cₒₘ/ <strong>NB</strong> not all characters supported</li>
<li>Math sans bold https://𝗲𝘅𝗮𝗺𝗽𝗹𝗲.𝗰𝗼𝗺/</li>
<li>Math sans bold italic https://𝙚𝙭𝙖𝙢𝙥𝙡𝙚.𝙘𝙤𝙢/</li>
<li>Math sans italic https://𝘦𝘹𝘢𝘮𝘱𝘭𝘦.𝘤𝘰𝘮/</li>
<li>Math Squared https://🄴🅇🄰🄼🄿🄻🄴.🄲🄾🄼/ <strong>NB</strong> the dot must not be squared</li>
<li>Circled https://ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ/ <strong>NB</strong> the dot must not be circled</li>
</ul>

<p>There are a whole bunch more miscellaneous characters you can use:</p>

<blockquote class="social-embed" id="social-embed-1049391152854634498" lang="fi" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/Cr1ss0v" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRloBAABXRUJQVlA4IE4BAAAwCQCdASowADAAPrFGnUmnI6KhONJIAOAWCWIArDPoxvidVBOb52zganG14b7TwR6PW9U5Wy9O7b9T2kpUBcNGyskCH+v5dIUuR13VMgPL9r+AANKhct6PGqQPpE1X0p6dRL2IQpLuwBI2vxcbKIBbZzGaWvN91GK8MOISTBzLo355TZQuB64BYvGs9rDwxWJ6SR8G8lOMFqcP7CtLorL+vg/dIwFchpxoe/RCzqTRCz8U50c26gEErU588KzFjjh9zdPeXPWLrmHvHgCpfAUg6h12ziFuhOGdsr8XnvCJQ//y+ZEjmwYFAwJ3ycLiQ/rdyg8hIUIYALJgXFx1h6+bfa2SU3vVg1RqAO3x8DPuPEFhTv4C98dn3CcK0Ej+IHi8lFdNObLcWweyFJhPZCWu+IyI3Xe7SaJK37qnWgZRWaiS7/eblZ0xXtc/uxAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Christoph Päper 🇪🇺</p>@Cr1ss0v</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/lambdalynx/status/1049309822062141440">Replying to @lambdalynx</a></small><a href="https://twitter.com/lambdalynx">@lambdalynx</a> <a href="https://twitter.com/edent">@edent</a> Wait, so one can use any of<br>㍳ ㏃ ㏇(!) ㏈ ﬀﬃﬄﬁﬂ ㎇㎓㎬㏉ ㏋㍱㎐ ㎄㎅㎑㏍㏎㎸㎾ ㎃㎆㎒㎫㎹㎷㎿㎽ ㎁㎋№㎵㎻ ㍵ ㎀㎩㎊㏗㏙㏚㎴㎺ ₨ ℠ßﬆ㏜ ℡㎔™ ㏝<br>ÅℬℂℭℰℱℐℑKℒℳℕℙℚℛℜℝℤℨ and more to leet-code URLs?<br><a href="https://twitter.com/urlstandard">@urlstandard</a></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/Cr1ss0v/status/1049391152854634498"><span aria-label="5 likes" class="social-embed-meta">❤️ 5</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2018-10-08T20:08:42.000Z" itemprop="datePublished">20:08 - Mon 08 October 2018</time></a></footer></blockquote>

<h2 id="how-does-this-work"><a href="https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/#how-does-this-work">How does this work?</a></h2>

<p>Magic! Which is to say, I <em>think</em> it is the browser doing the conversion. DNS Servers don't successfully reply to queries about .℡ domains.</p>

<p>The browser sees the .℡ and then follows the IDNA2008 process listed in <a href="https://tools.ietf.org/html/rfc5895">RFC5895</a> to normalise it:</p>

<blockquote>
<p>map characters to the "Simple_Lowercase_Mapping" property (the fourteenth column) in &lt;<a href="https://www.unicode.org/Public/UNIDATA/UnicodeData.txt">http://www.unicode.org/Public/UNIDATA/UnicodeData.txt</a>&gt;, if any.
</p></blockquote>

<p>The ℡ entry is:</p>

<p><code>2121;TELEPHONE SIGN;So;0;ON;&lt;compat&gt; 0054 0045 004C;;;;N;T E L SYMBOL;;;;</code></p>

<p>U+0054 is T, U+0045 is E, U+004C is L.</p>

<p>You can test this in Python using:</p>

<pre><code>python -c 'import sys;print sys.argv[1].decode("utf-8").encode("idna")' "℡"
</code></pre>

<h2 id="does-this-work"><a href="https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/#does-this-work">Does this work?</a></h2>

<p>Yes! I asked people on Twitter whether they could access my website using a .℡ - and it appeared to work on every modern browser and operating system.</p>

<blockquote class="social-embed" id="social-embed-1049247687030329344" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Hey gang! I have a little experiment for you 🙂<br><br>Does this URL resolve in your browser? <br>https://edent.℡/<br>(That's https:// edent. ℡ /) <br><br>If it does or doesn't, could you let me know which browser and operating system?<br><br>THANKS!</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1049247687030329344"><span aria-label="17 likes" class="social-embed-meta">❤️ 17</span><span aria-label="79 replies" class="social-embed-meta">💬 79</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2018-10-08T10:38:37.000Z" itemprop="datePublished">10:38 - Mon 08 October 2018</time></a></footer></blockquote>

<p>It even works on command line tools like <code>wget</code> and <code>curl</code>.</p>

<blockquote class="social-embed" id="social-embed-1049258021036183552" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/6byNine" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRrQAAABXRUJQVlA4IKgAAABQBwCdASowADAAPp1CmEmlpCKhPHYIALATiWkAAOhV3TPI10vlFNG72nKGhuhDuu3RE0t4s7TEvoBel4kv79CzVcQAAP79UizaUrOaR+dJppBVBTEG9L/TaPgmZ/ngNsmKxabTBloRKVpLfJWOWbYF/Rhq4Ut6XuXW5AiDqJfhbEZzq9z9wdLd1G7BulWJrKAU9JwTbMAEjntbRt2TTf0JEKR7d8AAAAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Mike</p>@6byNine</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/1049247687030329344">Replying to @edent</a></small><a href="https://twitter.com/edent">@edent</a> Things used to retrieve web pages rather than web browsers<br>curl 7.59, Linux - Yes<br>wget 1.19, Linux - Yes</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/6byNine/status/1049258021036183552"><span aria-label="1 likes" class="social-embed-meta">❤️ 1</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2018-10-08T11:19:41.000Z" itemprop="datePublished">11:19 - Mon 08 October 2018</time></a></footer></blockquote>

<p>It does fail in some circumstances:</p>

<blockquote class="social-embed" id="social-embed-1049271595708174336" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/094459" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRuQBAABXRUJQVlA4INgBAADwCgCdASowADAAPrVOoUwnJCMiI4344BaJZACdMrmHfmZdxcaTsRq8RlRmEU+VJkc1q4a2jBrqMmYGqvChlxBfsMnNtQHRFZ8GMgJnmgi+9cs1zemng8gfYx3+B6cvH9AA+3rXreWKas4QqE50mgj/trfOE6M0uZaO0Q6wFqXFvRO2jRD01ReEe+6XrjsCesdRb86KyPogI9Oh9sGNUDFGiEC/rzRd6Iaqn8tG+vVB2Q1FZcPmql4CztLkrop/Uxtqb3xruFraDA2YdCEGZeMQiOsKtBnS5sVeogg61Nz13IjruAsDsXKYEUfZu0Liiy4C3l3mIVM6AuSr2AkenVhsumRAnNWVaAK7mR8c9moDqE3epiEdhWvUBOqYSVbm797XSAeN3AFwHBDrg+bfBUOfTgXrZrvovrDOLCUq++CZVxfXpK24jmznc0V1yTUDhdebBcGTHYzI0z+HKOd0fkZKhS8UucHStILnFzIvIJxynUn+0DvnfwzgC0fOH5PQUhT4EOXQcsDvZ+PB27/eZj9KozNrlQHkRHRSuPztJg04ZFG60qF6h1uTRNVxCIdI9Q1MX4dtJCaVDXuDmRGpaJX71+AtETbosw7pY9o3nqN1QxjU6K+FZIAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Ricardo Sueiras (@094459@hachyderm.io)</p>@094459</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/1049247687030329344">Replying to @edent</a></small><a href="https://twitter.com/edent">@edent</a> Yes, Chrome/Safari/Firefox running on Mac. The TEL however changed from superscript to normal text. If I copied/pasted into Word and then into the browser, the superscript is preserved and it no longer resolves (takes you to the google page with this page being the first hit)</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/094459/status/1049271595708174336"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2018-10-08T12:13:37.000Z" itemprop="datePublished">12:13 - Mon 08 October 2018</time></a></footer></blockquote>

<h2 id="what-are-the-limitations"><a href="https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/#what-are-the-limitations">What are the limitations?</a></h2>

<p>Two main ones:</p>

<ul>
<li>Sites like Twitter and Facebook don't recognise it as a valid URl and refuse to auto link it.</li>
<li>Some command line tools like <code>dig</code> and <code>host</code> don't understand it</li>
</ul>

<pre><code class="language-bash">dig edent.℡

; &lt;&lt;&gt;&gt; DiG 9.10.6 &lt;&lt;&gt;&gt; edent.℡
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NXDOMAIN, id: 55282
</code></pre>

<h2 id="is-this-useful"><a href="https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/#is-this-useful">Is this useful?</a></h2>

<p>Obviously yes. This may be the most important discovery of the decade. You get cool looking URls and get to save a couple of characters on specific domains, at the <em>minor</em> expense of working inconsistently.</p>

<p>It could also be used for evading URl filters.</p>

<p>Every modern browser supports these "fancy" domain names - but most websites won't automatically link to them. So sharing on Facebook doesn't work.</p>

<h2 id="where-can-it-be-used"><a href="https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/#where-can-it-be-used">Where can it be used?</a></h2>

<p>Here are the single characters which can be normalised down to a valid TLD. They're mostly country codes, but there are a few interesting exceptions:</p>

<ul>
<li><code>㏕</code> - US Military</li>
<li><code>℡</code> - .tel registry</li>
<li><code>№</code> - Norway</li>
<li><code>㍳</code> - Australia</li>
<li><code>㍷</code> - Dominica</li>
<li><code>㎀</code> - Panama</li>
<li><code>㎁</code> - Namibia</li>
<li><code>㎃</code> - Morocco</li>
<li><code>㎊</code> - French Polynesia</li>
<li><code>㎋</code> - Norfolk Island</li>
<li><code>㎏</code> - Kyrgyzstan</li>
<li><code>㎖</code> - Mali </li>
<li><code>㎙</code> - Federated States of Micronesia</li>
<li><code>ﬁ</code> - Finland</li>
<li><code>㎜</code> - <a href="https://en.wikipedia.org/wiki/.mm">Myanmar</a></li>
<li><code>㎝</code> - Cameroon</li>
<li><code>㎞</code> &amp; <code>㏎</code> - <a href="https://en.wikipedia.org/wiki/.km">Comoros</a></li>
<li><code>㎰</code> - Palestine</li>
<li><code>㎳</code> - Montserrat</li>
<li><code>㎷</code> &amp; <code>㎹</code> - Republic of Maldives.</li>
<li><code>㎺</code> - Palau</li>
<li><code>㎽</code> &amp; <code>㎿</code> - Malawi</li>
<li><code>㏄</code> - Cocos (Keeling) Islands</li>
<li><code>㏅</code> - Democratic Republic of Congo</li>
<li><code>㏉</code> - Guyana</li>
<li><code>㏗</code> - Philippines</li>
<li><code>㏘</code> - Saint Pierre and Miquelon</li>
<li><code>㏚</code> - Puerto Rico</li>
<li><code>㏛</code> - <a href="https://en.wikipedia.org/wiki/.sr">Suriname</a></li>
<li><code>㏜</code> - El Salvador</li>
<li><code>℠</code> -  San Marino</li>
<li><code>™</code> - Turkmenistan</li>
<li><code>ﬆ</code> &amp; <code>ﬅ</code> - São Tomé and Príncipe</li>
<li><code>㎇</code> - Great Britain (<a href="https://en.wikipedia.org/wiki/.gb">Obsolete</a>)</li>
<li><code>ß</code> - South Sudan (<a href="http://www.iana.org/domains/root/db/ss.html">Not available</a>)</li>
<li><code>㏌</code> - India and Indiana (subdomain of .us)</li>
<li><code>Ⅵ</code> &amp; <code>ⅵ</code> - Virgin Islands and Virginia (subdomain of .us)</li>
<li><code>ﬂ</code> - Florida (subdomain of .us)</li>
<li><code>㎚</code> - New Mexico (subdomain of .us)</li>
<li><code>㎵</code> - Nevada (subdomain of .us)</li>
<li><code>㍵</code> - As part of <a href="https://en.wikipedia.org/wiki/.ovh">.ovh</a></li>
</ul>

<p>If you can find any more, please stick a comment in the box below.</p>

<p>You can always reach this blog post at:</p>

<p><span style="font-size:2em;">https://🅂𝖍𝐤ₛᵖ𝒓.ⓜ𝕠𝒃𝓲/🆆🆃🅵/</span></p>

<hr>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=30483&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2018/11/domain-hacks-with-unusual-unicode-characters/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[What's the future for the .tel domain name?]]></title>
		<link>https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/</link>
					<comments>https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 02 Feb 2017 15:10:40 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[.tel]]></category>
		<category><![CDATA[dns]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=24506</guid>

					<description><![CDATA[Good news!   is being relaunched with a slew of new features which frees it up from its previous shackles.  What is .tel  Your address book is probably a mausoleum - stuffed with the rotting corpses of long dead phone numbers.  Perhaps you took my business card back in 2002, duly entered it on your Palm Pilot, and never spoke to me again.  That address book entry has a phone number I&#039;ve not used…]]></description>
										<content:encoded><![CDATA[<p>Good news!  <img src="https://shkspr.mobi/blog/wp-content/uploads/2011/01/tel-icon1.png"> is being relaunched with a slew of new features which frees it up from its previous shackles.</p>

<h2 id="what-is-tel"><a href="https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/#what-is-tel">What is .tel</a></h2>

<p>Your address book is probably a mausoleum - stuffed with the rotting corpses of long dead phone numbers.  Perhaps you took my business card back in 2002, duly entered it on your Palm Pilot, and never spoke to me again.  That address book entry has a phone number I've not used for a decade, an email address provided by a defunct start-up, and a postal address for a country I no longer live in.</p>

<p>Isn't there a better way?</p>

<p>That's what .tel was supposed to be.</p>

<ul>
<li>I register a .tel domain - <a href="http://edent.tel"><code>http://edent.tel</code></a></li>
<li>I fill it with my contact details.</li>
<li>You store my .tel in your address book.</li>
<li>When I change my phone number, I update my .tel and your phonebook receives the changes.</li>
</ul>

<p>The magic of .tel is that everything is stored in the DNS.  It shouldn't matter if the website goes down - or even if you've got low connectivity. All you need to do to get my details is:</p>

<pre><code>dig @8.8.8.8 edent.tel naptr
</code></pre>

<p>Or, to get <em>everything</em> in the DNS records:</p>

<pre><code>dig +nocmd edent.tel any +multiline +noall +answer
</code></pre>

<p>The tragedy of .tel is that there was almost no UI customisation available. Every site looked close to identical, corporate colour schemes couldn't be  easily integrated, and the design was limited.</p>

<p>This is what it looked like back in 2009:</p>

<img src="https://shkspr.mobi/blog/uploaded_images/IMG_0011-711880.png" width="320" height="480" alt="A plain looking website" class="aligncenter size-full">

<p>Which, thankfully, had improved by 2013:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2013/03/edent.tel-screenshot.jpg" alt="A screenshot of the original .tel platform" width="512" height="878" class="aligncenter size-full wp-image-16500">

<p>No further improvements were made.</p>

<p>So, how well did it work in practice?</p>

<h2 id="lack-of-critical-mass"><a href="https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/#lack-of-critical-mass">Lack of critical mass</a></h2>

<p>Back in 2012, there were <a href="https://icannwiki.com/.tel">256k .tel domains</a>.  In 2016, it's a mere <a href="http://www.statdns.com/">105k domains</a>.  Those numbers need to be in the multi-millions in order to get the traction needed for success.  In their original proposal, <a href="https://web.archive.org/web/20180207125136/http://www.tel.community/t423-comparision-of-the-five-year-financial-projections-for-tel-before-after">they were expecting 20 million registrations</a> five years after launch.</p>

<p>As registrations fell, so did income. <a href="https://web.archive.org/web/20180207125443/http://www.tel.community/t1730-interesting-quotes-from-telnic-s-telnames-former-cto">Senior staff left</a> the .tel organisation, and the infrastructure was left to rot. There were <a href="https://web.archive.org/web/20180207125215/http://www.tel.community/t434-request-for-all-tel-owners-please-tell-us-your-suggestions-to-improve-tel">no updates</a>, and it looked like <a href="https://web.archive.org/web/20180207125339/http://www.tel.community/t4491-telnic-ltd-officially-declares-negative-net-worth">.tel might collapse</a> - an unprecedented event in DNS history.</p>

<p>I worked in the mobile industry for a decade. I don't think I <em>ever</em> met anyone else with a .tel.  I got mine <a href="https://shkspr.mobi/blog/2009/03/some-thoughts-on-tel/">when they first launched in 2009</a> - and have been lonely ever since.</p>

<p>As far as I can tell, no mobile phones were ever released which had .tel capable address books.</p>

<h2 id="relaunch"><a href="https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/#relaunch">Relaunch!</a></h2>

<p>Late last year, .tel owners were sent emails describing the upcoming relaunch and reinvigoration of the service.</p>

<ul>
<li>✓ Lifting of usage restrictions.</li>
<li>✓ A new Telhosting platform.</li>
<li>✓ Android and iPhone apps.</li>
<li>✘ No porting of data!</li>
<li>✘ No sub-pages.</li>
<li>✘ No search.</li>
<li>✘ No advertising.</li>
<li>✘ Limited foreign language support.</li>
</ul>

<p>It's a bit of a mixed bag.  But, hopefully, there's enough to sustain numbers - if not increase them.</p>

<p>The most important is the lifting of hosting and design restrictions.  Users will be able to point their .tel at any site they like.  The idea of it <em>just</em> being an address book is disappearing.</p>

<p>For those people who do want to keep it as their virtual contact card - a new platform is being launched with an improved interface and fewer design restrictions.  It will still be free of charge for domain owners.</p>

<p>As far as I can tell, this also means that sites can be secured with https - something which was unavailable on the old system.</p>

<p>Apps will be available for <em>editing</em> your site - but it would be a lot more useful to integrate with native address books.</p>

<p>It is downright <strong>odd</strong> that they're not automatically porting over peoples' data. There's going to be a one month grace period before launch in mid-March, but that isn't a huge amount of time.</p>

<p>The lack of sub-pages and search probably reflects how little those features were used. Removing Ad-Sense seems weird - but people can always add their own advertising.</p>

<p>They're also dropping support for "Arabic, Czech, Japanese, Korean, Portuguese and Russian" - I have no idea what those languages have in common! I assume they just mean that their hosting platform won't contain translations for those languages.</p>

<h2 id="is-it-enough"><a href="https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/#is-it-enough">Is it enough?</a></h2>

<p>I doubt it. Sorry to be so pessimistic - there are now literally <a href="https://www.iana.org/domains/root/db"><em>hundreds</em> of available top level domains</a>.  Including .mobi, .mobile, .phone, .call, .me - all of which could serve the same purpose.</p>

<p>If .tel had built on their early momentum - and perhaps done some deals with mobile networks or manufacturers - then perhaps .tel would be in a better position.</p>

<p>It is pretty neat that they can store data like this in the DNS, and it is more discoverable than <a href="http://microformats.org/wiki/hcard">.hcard or other microformats</a> - but I fear that the idea of placing one's address details in DNS is doomed to failure.</p>

<p>Because they aren't porting existing data to the new system, I expect that a lot of existing .tel sites are going to be empty.</p>

<h2 id="bonus-retro-video"><a href="https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/#bonus-retro-video">Bonus Retro Video</a></h2>

<p>This is how .tel launched itself back in the day.</p>

<iframe title="Telnic .TEL Commercial - What's Your (dot) Tel Name?" width="620" height="349" src="https://www.youtube.com/embed/pfdoPtRo0m4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Bless!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=24506&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
