<?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>WebMonetization &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/webmonetization/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Fri, 09 Jan 2026 08:47:33 +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>WebMonetization &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Responsible Disclosure: Chimoney Android App and KYCaid]]></title>
		<link>https://shkspr.mobi/blog/2026/01/responsible-disclosure-chimoney-android-app-and-kycaid/</link>
					<comments>https://shkspr.mobi/blog/2026/01/responsible-disclosure-chimoney-android-app-and-kycaid/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 12:34:52 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[CyberSecurity]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[WebMonetization]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=64849</guid>

					<description><![CDATA[Chimoney is a new &#34;multi-currency wallet&#34; provider. Based out of Canada, it allows users to send money to and from a variety of currencies. It also supports the new Interledger protocol for WebMonetization.  It is, as far as I can tell, unregulated by any financial institution. Nevertheless, it performs a &#34;Know Your Customer&#34; (KYC) check on all new account in order to prevent fraud.  To do this,…]]></description>
										<content:encoded><![CDATA[<p><a href="https://chimoney.app/">Chimoney</a> is a new "multi-currency wallet" provider. Based out of Canada, it allows users to send money to and from a variety of currencies. It also supports the new Interledger protocol for <a href="https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/">WebMonetization</a>.</p>

<p>It is, as far as I can tell, unregulated by any financial institution. Nevertheless, it performs a "Know Your Customer" (KYC) check on all new account in order to prevent fraud.  To do this, it uses the Ukranian <a href="https://kycaid.com/">KYCaid</a> platform.</p>

<p>So far, so standard. But there's a small problem with how they both integrate.</p>

<p>I installed Chimoney's Android app and attempted to go through KYCaid's verification process. For some reason it hit me with this error message.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/error.webp" alt="Screenshot. An error occurred and an email address." width="504" class="aligncenter size-full wp-image-64856">

<p>Well, I'd better click that email and report the problem.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/email-protected.webp" alt="Screenshot. The email is protected, but clickable." width="504" height="240" class="aligncenter size-full wp-image-64855">

<p>Oh, that's odd. What happens if I click the protected link?</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/Cloudflare.webp" alt="Screenshot. Cloudflare's email protection screen." width="504" height="625" class="aligncenter size-full wp-image-64854">

<p>Huh! I guess I've been taken to Cloudflare's website. What happens if I click on the links on their page?</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/discord.webp" alt="Screenshot. Invitation to join Cloudflare's Discord." width="504" height="606" class="aligncenter size-full wp-image-64853">

<p>Looks like I can now visit any site on the web. If Cloudflare has a link to it, I can go there. For example, GitHub.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/github.webp" alt="Screenshot. GitHub page still within the Chimoney app." width="504" height="499" class="aligncenter size-full wp-image-64852">

<h2 id="why-is-this-a-problem"><a href="https://shkspr.mobi/blog/2026/01/responsible-disclosure-chimoney-android-app-and-kycaid/#why-is-this-a-problem">Why is this a problem?</a></h2>

<blockquote><p><a href="https://mas.owasp.org/MASTG/knowledge/android/MASVS-PLATFORM/MASTG-KNOW-0018/">MASTG-KNOW-0018: WebViews</a></p>

<p>One of the most important things to do when testing WebViews is to make sure that only trusted content can be loaded in it. Any newly loaded page could be potentially malicious, try to exploit any WebView bindings or try to phish the user. <strong>Unless you're developing a browser app, usually you'd like to restrict the pages being loaded to the domain of your app.</strong> A good practice is to prevent the user from even having the chance to input any URLs inside WebViews (which is the default on Android) nor navigate outside the trusted domains. Even when navigating on trusted domains there's still the risk that the user might encounter and click on other links to untrustworthy content</p>

<p><small>Emphasis added</small></p></blockquote>

<p>A company's app is its sacred space. It shouldn't let anyone penetrate its inner sanctum because it has no control over what that 3rd party shows its customers.</p>

<p>There's nothing stopping an external service displaying a message like "To continue, please transfer 0.1 Bitcon to …"</p>

<p>(Of course, if your KYC provider - or their CDN - decides to turn evil then you probably have bigger problems!)</p>

<p>There are some other problems. It has long been known that <a href="https://discussions.apple.com/thread/7918307?sortBy=rank">people can use in-app browsers to circumvent restrictions</a>.  Some in-app browsers have <a href="https://medium.com/%40youssefhussein212103168/exploiting-insecure-android-webview-with-setallowuniversalaccessfromfileurls-c7f4f7a8db9c">insecure configurations which can be used for exploits</a>.  These sorts of "accidentally open" browsers <a href="https://matan-h.com/google-has-a-secret-browser-hidden-inside-the-settings/">are often considered to be a security vulnerability</a>.</p>

<h2 id="the-fix"><a href="https://shkspr.mobi/blog/2026/01/responsible-disclosure-chimoney-android-app-and-kycaid/#the-fix">The Fix</a></h2>

<p>Ideally, an Android app like this wouldn't use a web view. It should use a KYC provider's API rather than giving them wholesale control of the user experience.</p>

<p>But, suppose you do need a webview. What's the recommendation?</p>

<p>Boring old <a href="https://blog.oversecured.com/Android-security-checklist-webview/#insufficient-url-validation">URl validation</a> using <a href="https://developer.android.com/reference/android/webkit/WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest)">Android's <code>shouldOverrideUrlLoading()</code> method</a>.</p>

<p>Essentially, your app restricts what can be seen in the webview and rejects anything else.</p>

<h2 id="risk"><a href="https://shkspr.mobi/blog/2026/01/responsible-disclosure-chimoney-android-app-and-kycaid/#risk">Risk</a></h2>

<p>Look, this is pretty low risk. A user would have to take several deliberate steps to find themselves in a place of danger.</p>

<p>Ultimately, it is "<a href="https://wiki.c2.com/?CodeSmell">Code Smell</a>" - part of the app is giving off a noxious whiff. That's something you cannot afford to have on a money transfer app. If this simple security fix wasn't implemented, what other horrors are lurking in the source code?</p>

<h2 id="contacting-the-company"><a href="https://shkspr.mobi/blog/2026/01/responsible-disclosure-chimoney-android-app-and-kycaid/#contacting-the-company">Contacting the company</a></h2>

<p>There was no <a href="https://securitytxt.org/">security.txt</a> contact - nor anything on their website about reporting security bugs. I reached out to the CEO by email, but didn't hear back.</p>

<p>In desperation, I went on to Discord and asked in their support channel for help.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/send-an-email.webp" alt="Screenshot. Someone advising me on who to email." width="504" class="aligncenter size-full wp-image-64857">

<p>Unfortunately, that email address didn't exist.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/email-chimoney.webp" alt="Bounce message." width="504" class="aligncenter size-full wp-image-64851">

<p>I also tried contacting KYCaid, but they seemed unable or unwilling to help - and redirected me back to Chimoney.</p>

<p>As it has been over two month since I sent them video of this bug, I'm performing a responsible disclosure to make people aware of the problem.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=64849&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2026/01/responsible-disclosure-chimoney-android-app-and-kycaid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Security Flaws in the WebMonetization Site]]></title>
		<link>https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/</link>
					<comments>https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 26 Aug 2025 11:34:33 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[CyberSecurity]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[WebMonetization]]></category>
		<category><![CDATA[xss]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=62468</guid>

					<description><![CDATA[I&#039;ve written before about the nascent WebMonetization Standard. It is a proposal which allows websites to ask users for passive payments when they visit. A visitor to this site could, if this standard is widely adopted, opt to send me cash for my very fine blog posts.  All I need to do is add something like this into my site&#039;s source code:  &#60;link rel=&#34;monetization&#34;…]]></description>
										<content:encoded><![CDATA[<p>I've written before about <a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/">the nascent WebMonetization Standard</a>. It is a proposal which allows websites to ask users for passive payments when they visit. A visitor to this site could, if this standard is widely adopted, opt to send me cash for my very fine blog posts.</p>

<p>All I need to do is add something like this into my site's source code:</p>

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

<p>A user who has a WebMonetization plugin can then easily pay me for my content.</p>

<p>But not every website is created by an individual or a single entity. Hence, the creation of the "<a href="https://webmonetization.org/tools/prob-revshare/">Probabilistic Revenue Share Generator</a>".</p>

<blockquote><p>Probabilistic revenue sharing is a way to share a portion of a web monetized page's earnings between multiple wallet addresses. Each time a web monetized user visits the page, a recipient will be chosen at random. Payments will go to the chosen recipient until the page is closed or reloaded.</p></blockquote>

<p>Nifty! But how does it work?</p>

<p>Let's say a website is created by Alice and Bob. Alice does most of the work and is to receive 70% of the revenue. Bob is to get the remaining 30%.  Within the web page's head, the following meta element is inserted:</p>

<pre><code class="language-html">&lt;link
   rel="monetization"
   href="https://webmonetization.org/api/revshare/pay/W1siaHR0cHM6Ly9leGFtcGxlLmNvbS8iLDcwLCJBbGljZSJdLFsiaHR0cHM6Ly93aGF0ZXZlci50ZXN0LyIsMzAsIkJvYiJdXQ"
/&gt;
</code></pre>

<p>The visitor's WebMonetization plugin will visit that URl and be redirected to Alice's site 70% of time and Bob's 30%.</p>

<p>If we Base64 decode that weird looking URl, we get:</p>

<pre><code class="language-json">[
   [
      "https://example.com/",
       70,
      "Alice"
   ],
   [
      "https://whatever.test/",
       30,
      "Bob"
   ]
]
</code></pre>

<p>Rather than adding multiple URls in the head, the site points to one resource and lets that pick who receives the funds.</p>

<p>There are two small problems with this.</p>

<p>The first is that you have to trust the WebMonetization.org website. If it gets hijacked or goes rogue then all your visitors will be paying someone else. But let's assume they're secure and trustworthy. There's a slightly more insidious threat.</p>

<p>Effectively, this allows an untrusted 3rd party to use the WebMonetization.org domain as an open redirect. That's useful for phishing and other abuses.</p>

<p>For example, an attacker could send messages encouraging people to visit:</p>

<p><a href="https://webmonetization.org/api/revshare/pay/W1siaHR0cHM6Ly9leGFtcGxlLmNvbS8iLDk5LCJpbWciXV0">https://webmonetization.org/api/revshare/pay/W1siaHR0cHM6Ly9leGFtcGxlLmNvbS8iLDk5LCJpbWciXV0</a></p>

<p>Click that and you'll instantly be redirected to a domain under the attacker's control. This could be particularly bad if the domain encouraged users to share passwords or other sensitive information.</p>

<p>If the Base64 data cannot be decoded to valid JSON, the API will echo back any Base64 encoded text sent to it. This means an attacker could use it to send obfuscated messages. Consider, tor example:</p>

<p><a href="https://webmonetization.org/api/revshare/pay/W1siUGxlYXNlIHZpc2l0IFJlYWxfZ29vZF9DYXNpbm9zLmJpeiBmb3IgbG90cyBvZiBDcnlwdG8gZnVuISEhIiwxMjM0NTYsImltZyJdXQ==">https://webmonetization.org/api/revshare/pay/W1siUGxlYXNlIHZpc2l0IFJlYWxfZ29vZF9DYXNpbm9zLmJpeiBmb3IgbG90cyBvZiBDcnlwdG8gZnVuISEhIiwxMjM0NTYsImltZyJdXQ==</a></p>

<p>Visit that and you'll see a message. With a bit of effort, it could be crafted to say something to encourage a visitor to enter their credentials elsewhere.</p>

<p>When I originally reported this, the site could be used to to smuggle binary payloads. For example, <a href="https://webmonetization.org/api/revshare/pay/W1siZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmtnQkFBQlhSVUpRVmxBNElEd0JBQUNRQ0FDZEFTb3dBREFBUHJWUW4weW5KQ0tpSnl0bzRCYUphUUFJSXN4NEF1OWRoRHFWQTFpMVJvUlRPN25iZHl5MDNuTTVGaHZWNjJnb1VqMzd0dXhxcGZwUGVUQlp2cko3OHcwcUFBRCsvaFZ5Rkh2WVhJck1Dam55MHo3d3FzQjkvUUUwOHhscy9BUWRYSkZYMGFkRzlsSVNzbTZrVjk2SjVGSU5CRlh6SHdmek1DcjRONnIzejUvQWEvd2ZFb1ZHWDNIOTc2c2hlM2p5UzhScUp2N0p3N2JPeG9UU1BsdTRnTmJmWFlaOVRuYmRRME1Obk1PYnlhUlFMSXU1NTZqSWowM3pmSnJWZ3FSTThHUHdSb1diMU05QWZ6RmU2TXRnMTN1RUlxclRIbWl1QnBIK2JUVkI1RUVRM3VieTBDLy9YT0FQSk9GdjRRVjhSWkRQUWQ1MTdLaHliYThKbHI5N2oya0lCSkQ5SzNtYk9IU0hpUURhc2o2WTNmb3JBVGJJZzRRWkh4V25DZXFxTWtWWWZVQWl2dUwwTC82OG1NbmFnQUFBIiw4OCwiaW1nIl1d">this URl would display an image</a> - however, it seems to have been fixed.</p>

<p>Nevertheless, it is important to recognise that the WebMonetization.org domain contains an <a href="https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html">unvalidated redirect and forwarding</a> vulnerability.</p>

<p>I recommended that they ensured that the only URls which contain legitimate payment pointers should be returned. I also suggested setting a maximum limit for URl size.</p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/#timeline">Timeline</a></h2>

<ul>
<li>2025-03-27 - Discovered and disclosed.</li>
<li>2025-08-05 - Remembered I'd submitted it and sent a follow up.</li>
<li>2025-08-26 - Automatically published.</li>
<li><ins datetime="2025-08-27T15:37:49+00:00">2025-08-27</ins> - A day after this post was published, <a href="https://github.com/interledger/publisher-tools/issues/85">the issue was made public on their repo</a>.</li>
<li><ins datetime="2025-09-11T12:25:32+00:00">2025-09-10</ins> - <a href="https://github.com/interledger/publisher-tools/issues/85#issuecomment-3274623144">Confirmed fixed</a>.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=62468&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/feed/</wfw:commentRss>
			<slash:comments>4</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>
	</channel>
</rss>
