<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Web platform and delivery on errno</title><link>https://errno.jofrey.eu/categories/web-platform-and-delivery/</link><description>Recent content in Web platform and delivery on errno</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 15 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://errno.jofrey.eu/categories/web-platform-and-delivery/index.xml" rel="self" type="application/rss+xml"/><item><title>Search Console says "Possible phishing detected on user login" on a site with no login</title><link>https://errno.jofrey.eu/posts/search-console-possible-phishing-on-user-login/</link><pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate><guid>https://errno.jofrey.eu/posts/search-console-possible-phishing-on-user-login/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;&#10;&lt;p&gt;Search Console, Security Issues, on a static site of mine:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Security issues&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1 issue detected&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Possible phishing detected on user login&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The browser will show pop-up warnings when users enter saved login&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;credentials into some pages on your site&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Sample URLs: N/A&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The site is a generated static blog. No accounts, no login page, no registration, no comments, no&#10;newsletter signup, no &lt;code&gt;&amp;lt;input type=&amp;quot;password&amp;quot;&amp;gt;&lt;/code&gt; anywhere in the output, and none of those ever existed.&#10;There is nothing on it that a user could enter login credentials into, which makes the message read like&#10;either a false positive or — the reading that ruins your evening — evidence that someone is serving a login&#10;page from my domain that I have never seen.&lt;/p&gt;</description></item><item><title>A phone input mask that silently rewrote the number I typed</title><link>https://errno.jofrey.eu/posts/jquery-mask-silently-rewrites-phone-number/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://errno.jofrey.eu/posts/jquery-mask-silently-rewrites-phone-number/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;Numbers in this post are placeholders; the original test used a real number that has been redacted.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="what-happened"&gt;What happened&lt;/h2&gt;&#10;&lt;p&gt;A registration form had a mobile number field with a national format mask:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;form-control mask-phone&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;phone&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;maxlength&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;14&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;minlength&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;14&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mobile number&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I filled it with a foreign number in international form. The field did not go red, no message appeared —&#10;the value became:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;input: +421900123456&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;field: 06&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Typing digit by digit was worse. The mask pre-seeds the national trunk prefix, so my leading digits were&#10;consumed as part of it and the rest shifted:&lt;/p&gt;</description></item><item><title>Cloudflare Email Routing rejects mail with 550 5.7.26 "not authenticated"</title><link>https://errno.jofrey.eu/posts/cloudflare-email-routing-550-5-7-26-not-authenticated/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://errno.jofrey.eu/posts/cloudflare-email-routing-550-5-7-26-not-authenticated/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;&#10;&lt;p&gt;A freshly created routing rule (&lt;code&gt;contact@example.com&lt;/code&gt; → a Gmail mailbox) looked configured. Sending a test&#10;message straight to the MX from a host with no outbound mail authentication failed at the DATA stage:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;smtplib.SMTPDataError: (550, b&amp;#39;5.7.26 Cannot forward emails that are not authenticated.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Refer to https://developers.cloudflare.com/email-routing/postmaster/ for more information..&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note &lt;strong&gt;where&lt;/strong&gt; it failed: &lt;code&gt;MAIL FROM&lt;/code&gt; and &lt;code&gt;RCPT TO&lt;/code&gt; were both accepted, so it is not an unknown-recipient&#10;or configuration problem.&lt;/p&gt;</description></item><item><title>HTTP 522 after pointing a domain at Cloudflare Pages (and the Search Console fallout)</title><link>https://errno.jofrey.eu/posts/cloudflare-pages-custom-domain-522-switch-dns-after-active/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://errno.jofrey.eu/posts/cloudflare-pages-custom-domain-522-switch-dns-after-active/</guid><description>&lt;h2 id="what-i-did-and-what-broke"&gt;What I did, and what broke&lt;/h2&gt;&#10;&lt;p&gt;Migrating a static site to Cloudflare Pages, in this order:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;POST /accounts/{id}/pages/projects&lt;/code&gt; — create project&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;wrangler pages deploy public --project-name …&lt;/code&gt; — upload, deployment succeeded&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;POST /accounts/{id}/pages/projects/{p}/domains&lt;/code&gt; — add &lt;code&gt;site.example.com&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;immediately&lt;/strong&gt; repoint the DNS record to &lt;code&gt;&amp;lt;project&amp;gt;.pages.dev&lt;/code&gt;, proxied&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Seconds later:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -sSI https://site.example.com/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTTP/2 522&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server: cloudflare&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cf-ray: a3664d60bfb3386b-LHR&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The domain was serving Cloudflare&amp;rsquo;s &amp;ldquo;connection timed out&amp;rdquo; error, because the Pages side had not finished&#10;attaching it:&lt;/p&gt;</description></item><item><title>reCAPTCHA v3 rejects your headless Chromium and no fingerprint patch fixes it</title><link>https://errno.jofrey.eu/posts/recaptcha-v3-rejects-headless-chromium-validation-failed/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://errno.jofrey.eu/posts/recaptcha-v3-rejects-headless-chromium-validation-failed/</guid><description>&lt;h2 id="symptom"&gt;Symptom&lt;/h2&gt;&#10;&lt;p&gt;An end-to-end check drives a form on a site I am allowed to automate. In a normal browser session the&#10;submission succeeds. From headless Chromium, the token is generated without error — &lt;code&gt;grecaptcha.execute()&lt;/code&gt;&#10;resolves and returns a 2 361-character token — but the backend rejects it:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;success&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;errors&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;general&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;validation.recaptchav3&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The important detail: &lt;strong&gt;the failure is not client-side&lt;/strong&gt;. There is no exception, no missing site key, no&#10;network error. The token exists and is syntactically fine. reCAPTCHA v3 is score-based, and the score&#10;arrives at the server too low to pass its threshold.&lt;/p&gt;</description></item></channel></rss>