Michal Špaček @spazef0rze.bsky.social · 08/10/2026If you own a domain and serve a JS for your customers and you close the app, you still have to pay for the domain forever. Otherwise someone will buy it and start serving malicious JS. The newest case: ecomtrack-io. Existed for years, reregistered in September, now serves malware :-( 000
Michal Špaček @spazef0rze.bsky.social · 30/09/2026Microsoft has added a native Linux containers support to Windows via CLI and API and is planning to further develop it. Imagine traveling back in time 20 years and posting this to a random online discussion forum 😅 blogs.windows.com/windowsdevel...blogs.windows.comWSL containers is now generally availableWSL is central to our commitment to making Windows the best place to build, run and manage Linux workloads. As AI, cloud-native development, containers, and open-source ecosystems continue to converge... 060
Michal Špaček @spazef0rze.bsky.social · 26/09/2026Sometimes it's the small things. Thanks Chrome Dev Tools, "Edit and resend as fetch" saves me a lot of "Copy as fetch, Ctrl+V, damn this is not the console window"-moments. 020
Michal Špaček @spazef0rze.bsky.social · 19/09/2026If you google Bletchley Park you get this cool on-topic Easter egg 000
Michal Špaček @spazef0rze.bsky.social · 16/09/2026Recently I had a lot of undelivered emails, the sending server simply couldn't connect. Another sender that couldn't connect was a major local mail service provider. Once switched to smtp.google.com, some of the messages were redelivered. If you're using mx[1-4].smtp.goog then... maybe don't, YMMV.smtp.google.com 000
Michal Špaček @spazef0rze.bsky.social · 16/09/2026For some time, I've been using mx[1-4].smtp.goog for my DNS MX records - Google's unofficial DNSSEC signed MX. It was even official for a short time about a year ago: web.archive.org/web/20250904... but that link now redirects to a page that just says to use smtp.google.com. But recently... 100
Michal Špaček @spazef0rze.bsky.social · 15/08/2026I just learned there's a .CYOU ("See you") top-level domain. I fully expected it to be a typo of a .CZ domain (because Czech and English keyboards have swapped Y and Z, and even I personally sometimes type .CY instead of .CZ), but no, not a typo. And there's also the .ICU ("I see you") domain 🙄 010
Michal Špaček @spazef0rze.bsky.social · 26/05/2026After many JS-related supply chain attacks, there's a new PHP one! "The attacker replaced many or all release tags in four laravel-lang/ repositories with malicious lookalikes that point to their own commits which contained malware." snyk.io/blog/laravel...snyk.ioLaravel Lang Supply Chain Advisory | SnykLaravel Lang Packagist releases were republished with malicious code. Learn how the supply chain attack worked, what was stolen, and how to respond. 000
Michal Špaček @spazef0rze.bsky.social · 24/05/2026Whenever I see an email like this (in my spambox), with a Google Form asking for your email and a repo URL, all I can see is yet another supply chain attack in the making. I wouldn't want to run a legit competition nowadays 😅 (Disclaimer: I have no idea what KaiCode is) 001
Michal Špaček @spazef0rze.bsky.social · 30/04/2026Detailed report from DigiCert (thanks!) about "a limited number of code signing certificates, few of which were then used to sign malware". At the beginning a ZIP file with a .scr executable, and some time later 60 revoked Code Signing certificates. bugzilla.mozilla.org/show_bug.cgi...bugzilla.mozilla.org2033170 - DigiCert: Misissued code signing certificatesASSIGNED (dcbugzillaresponse) in CA Program - CA Certificate Compliance. Last updated 2026-04-28. 010
Michal Špaček @spazef0rze.bsky.social · 04/04/2026The Axios supply chain attack post mortem notes show how it was done: via a fake cloned company on a fake Teams call. The two comments with details: github.com/axios/axios/... and github.com/axios/axios/... 030
Michal Špaček @spazef0rze.bsky.social · 28/03/2026Here's your (ir)regular reminder that HTTPS certificates without the CN (Common Name) field are completely valid. For example the 6-day certificates from Let's Encrypt do not have a CN as per the "shortlived" profile letsencrypt.org/docs/profiles/letsencrypt.orgProfilesA profile is a collection of characteristics that describe both the validation process required to get a certificate, and the final contents of that certificate. For the vast majority of Let’s Encrypt... 000
Michal Špaček @spazef0rze.bsky.social · 25/03/2026There's a chance they need to store my data to not use them anymore if a new "enrichment source" appears. They also say they're not controllers as per GDPR, only processors, but entering my data could made them one. I could be wrong though. This will be 🤔 and I hope I'll learn a thing or two. 000
Michal Špaček @spazef0rze.bsky.social · 25/03/2026I always find entering personal details into a website to tell them to stop processing my personal data a bit absurd. This biz data enrichment company is processing my personal phone number. They told me to fill out this form, so I did. Now I'm asking how they process my data I have entered 😅 110
Michal Špaček @spazef0rze.bsky.social · 16/03/2026My favorite XSS trick when you can add only attributes (when < and > are removed from the input) is to add onfocus=alert(1) and autofocus: <input value="" onfocus="..." autofocus=""> To not create a loop, I add this.blur(), otherwise alert() steals the focus, and then the field gains it once again. 041
Michal Špaček @spazef0rze.bsky.social · 13/03/2026Naming is hard, so that's why my PHPStan extension called "Disallowed **Calls**" now supports disallowing **properties** 😅 Also a Friday the 13th release 👻 (at least in my timezone) github.com/spaze/phpsta...github.comRelease Can disallow properties · spaze/phpstan-disallowed-callsNaming is hard, so that's why this Disallowed Calls extension now supports disallowing instance and static properties, and enum properties with disallowProperties (#378) Other (mostly) internal cha... 000
Michal Špaček @spazef0rze.bsky.social · 27/01/2026When issuing a HTTPS certificate, the CA needs to make sure you own the domain, and one of the many methods is via email where they'll email you a link. This method will be discouraged in March 2026, disabled in March 2028. See security.googleblog.com/2025/12/http... + cabforum.org/2025/11/20/b...security.googleblog.comHTTPS certificate industry phasing out less secure domain validation methodsPosted by Chrome Root Program Team Secure connections are the backbone of the modern web, but a certificate is only as trustworthy as the... 010
Michal Špaček @spazef0rze.bsky.social · 29/12/2025Instead of `cat`, I use `bat`, "a cat(1) clone with wings." github.com/sharkdp/bat It supports syntax, line nrs, git etc. I have it aliased to `cat`. If you'd like to concat multiple files into one (`cat 1 2 3 > foo`), you should run the original like `\cat`, seems faster, in my case up to 10x.github.comGitHub - sharkdp/bat: A cat(1) clone with wings.A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub. 020
Michal Špaček @spazef0rze.bsky.social · 18/12/2025Best news I've discovered today is that ripgrep is also available for Windows and you can install it with winget (winget install ripgrep). ripgrep is like the grep utility in Linux, but a bit faster, it also accepts grep's params github.com/burntsushi/r...github.comGitHub - BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern while respecting your gitignoreripgrep recursively searches directories for a regex pattern while respecting your gitignore - BurntSushi/ripgrep 011
Reposted by Michal ŠpačekPer Thorsheim @thorsheim.bsky.social · 09/12/2025Michal Špaček @spazef0rze.bsky.social presenting his talk "Password Reuse Is a Dumpster Fire – We Brought a Hose" at #PasswordsCon in Prague, December 2, 2025. youtu.be/AuCNgoDf-5cyoutu.beMichal Špaček: Password Reuse Is a Dumpster Fire – We Brought a HoseYouTube video by Per Thorsheim 034
Michal Špaček @spazef0rze.bsky.social · 28/11/2025Looking at my access logs, the easiest way to block web scanners & bots is to block requests with a User-Agent header that says "old browser" where old is -10 major versions and older😁 For example Chrome is v142 and bots use Chrome/120, 116 etc. It's mostly a fun idea but it seems like I need a PoC😅 020
Michal Špaček @spazef0rze.bsky.social · 29/10/2025TIL that OCI stands for "Oracle Cloud Infrastructure" and also "Open Container Initiative". I've first learned about the former ("Oracle Cloud Infrastructure") and just spent 5 minutes trying to understand a bug where they used OCI in the latter meaning ("resolves remote OCI artifacts") 020
Michal Špaček @spazef0rze.bsky.social · 16/10/2025Díky za (virtuální) návštěvu přednášky, těší mě, že se líbila :-) 010
Reposted by Michal ŠpačekEiji Kitamura / えーじ @agektmr.com · 10/10/2025Chrome for Android can now help users adopt passkeys more seamlessly. If a user signs in with a saved password , your website can request that an associated password manager (in many cases on Chrome is Google Password Manager) creates a passkey automatically. developer.chrome.com/blog/automat...developer.chrome.comAutomatic passkey creation in Chrome for Android | Blog | Chrome for DevelopersChrome for Android can now automatically create passkeys after password sign-in, helping users transition to passkeys with less friction. 045
Michal Špaček @spazef0rze.bsky.social · 18/09/2025Did you know Facebook has a Certificate Transparency monitoring tool? Never mind then, they're shutting it down anyway :-) developers.facebook.com/tools/ct 000
Michal Špaček @spazef0rze.bsky.social · 14/09/2025You can configure it any way you want or need, but the extension comes with a bundled configuration files you can use out of the box. One of them disallows dangerous functions like var_dump() or put_env(), while another one blocks insecure functions like hash() with MD5 github.com/spaze/phpsta... 031
Michal Špaček @spazef0rze.bsky.social · 14/09/2025Just noticed that my PHPStan extension to detect disallowed calls, methods, attributes, constants etc. has been installed more than 15M times, wow! Not bad for a weekend project (a long weekend since 2018). PHPStan itself has 300M installs, so 5% of all PHPStans installs use the extension, nice! :-) 160
Michal Špaček @spazef0rze.bsky.social · 24/08/2025Just got one certificate using the tlsserver profile and of course as expected, the browsers are doing just fine, they just omit the field (Chrome), or say unknown (Firefox, could be confusing though). 000
Michal Špaček @spazef0rze.bsky.social · 24/08/2025There's another @letsencrypt.bsky.social certificate type ("profile") that doesn't come with a CN (Common Name) field anymore: the tlsserver profile. It's a 90 day cert, its properties "reflect the latest recommendations from the CA/Browser Forum Baseline Requirements, as well as general trends." 110
Michal Špaček @spazef0rze.bsky.social · 23/08/2025Such certificates are not very common today, but they will be more common in the future. For example Let's Encrypt's short-lived 6 day certificates do not have the CN field letsencrypt.org/docs/profiles/ You can find a cert without the CN field for testing here letsencrypt.org/2025/02/20/f...letsencrypt.orgProfilesA profile is a collection of characteristics that describe both the validation process required to get a certificate, and the final contents of that certificate. For the vast majority of Let’s Encrypt... 100
Michal Špaček @spazef0rze.bsky.social · 23/08/2025HTTPS certificates can exist without the CN (Common Name) field. It's not used for validation, instead browsers use the SAN (Subject Alternative Names) field. But if your tool uses CN for anything, e.g. to show a "name" for management purposes, check whether the tool works with CN-less certificates 111
Michal Špaček @spazef0rze.bsky.social · 08/08/2025420: Czech your DNS cache (420 is the CZ phone country code and this is a lame joke of mine 😅) 000
Michal Špaček @spazef0rze.bsky.social · 08/08/2025Here's a draft written by ChatGPT 😁 It has defined the new code 432 and even a new media type application/dns-refresh+json that would provide more details on why do you feel the client should refresh their cache gist.github.com/spaze/c1e100...gist.github.com"Refresh DNS" RFC draft as written by ChatGPT because bots frustrate me"Refresh DNS" RFC draft as written by ChatGPT because bots frustrate me - "Refresh DNS" RFC draft prompt.txt 120
Michal Špaček @spazef0rze.bsky.social · 08/08/2025There should be an HTTP response code in the 4xx range that would instruct the client to refresh their stale DNS records. Even after 48 hours some bots (looking at you Palo Alto Networks) are using the old IP for a hostname, while the DNS records have TTL of 5 minutes or so. 220
Michal Špaček @spazef0rze.bsky.social · 01/08/2025Here's one information for you: should be more specific when phishing IT folks 030
Michal Špaček @spazef0rze.bsky.social · 01/08/2025GiveWP (the donations WordPress plugin) managed to leak donors' emails into the donation form. And then they managed to mess up the communication :-( Nice resume of the problem at the Pi-hole blog as they were one of the affected sites pi-hole.net/blog/2025/07... Go and learn how to communicate.pi-hole.netCompromised Donor Emails: A post-mortem – Pi-hole 000
Michal Špaček @spazef0rze.bsky.social · 01/08/2025Absolutely! I hope that translates to free data transfers! Or maybe not 😅 000
Michal Špaček @spazef0rze.bsky.social · 29/07/2025Setting up a new server and I'm so happy I can do it remotely because it must be absolutely cold in the data center 120
Michal Špaček @spazef0rze.bsky.social · 28/07/2025My last name (Špaček) means starling in Czech. This guy used my veeery distant relative to store an image, nice 😁 Looking forward to an update to RFC 1149 where you don't need a small scroll of paper but instead use the carrier itself to store the data. 110
Michal Špaček @spazef0rze.bsky.social · 26/07/2025Just remembered Wolf3D had no multiplayer, but we've still managed to play it co-op style with a friend of mine: the two of us were sitting at one computer, he was using the arrow keys to navigate, I was using the spacebar to shoot. I also remember the headache after many hours of nonstop action 😅 120
Michal Špaček @spazef0rze.bsky.social · 26/07/2025I was today years old when I found out that the name of the company who's created Wolfenstein 3D and Doom, id Software, is pronounced "id software", "id" as in "kid", not "eye dee software" That's some 30 years after playing the games... en.wikipedia.org/wiki/Id_Soft...en.wikipedia.orgid Software - Wikipedia 150
Michal Špaček @spazef0rze.bsky.social · 23/07/2025Git reflog is a log of what happened in your repo. Commited this, amended that, reset to this etc. It has references (the "ref" in reflog) which you can use to get back to a previous state of your repository. For me, a highly useful feature, probably not that well known. It has saved me many times. 020
Michal Špaček @spazef0rze.bsky.social · 23/07/2025It's been 0 days since git reflog saved my ass (and files) again. Instead of rebase this branch, I did reset this branch, losing my commits. `git reflog`, find out what happened (reset at {46} and {48} in the pic), then `git branch name id` (id ends with 67 at {50}, commits are back. 161
Michal Špaček @spazef0rze.bsky.social · 09/07/2025What do you do when you can't sleep? I fine-tune my HTTP reasons 💤 020
Michal Špaček @spazef0rze.bsky.social · 07/07/2025I've asked ChatGPT to generate me a temp profile picture and when I've praised the creation it didn't know what to say, so it gave me back some JSON with a prompt that has resembled my instructions. ChatGPT then claimed, multiple times that I asked for the JSON 😁 I haven't talked about JSON before. 020
Michal Špaček @spazef0rze.bsky.social · 26/06/2025Stored XSS via an archive file stored in a RAR archive, nice 😁 Fixed in WinRAR 7.12 released yesterday. 020
Michal Špaček @spazef0rze.bsky.social · 25/06/2025Oops, being a web developer can be dangerous! 🤣 030
Michal Špaček @spazef0rze.bsky.social · 25/06/2025I have a battery powered outdoor camera, it can last several weeks on a single charge in that environment. But suddenly, the battery went from 20% to 0% overnight. I was curious what happened so I checked the last pic it has recorded. Yeah, thanks little fella 😂 120