the blog
What AI leaves open.
Plain-English writing on the security holes AI coding tools leave behind, and how to close them.
June 2, 2026 · 4 min read
The Contact Form Was Fine. The Personal Inbox It Emailed Everything To Wasn't.
A simple website contact form, built in minutes with an AI website builder, quietly forwarding every submission to a personal email account that had been compromised months earlier and nobody had noticed.
Read itJune 1, 2026 · 4 min read
Deleting the Name Column Doesn't Mean the Data Is Actually Anonymous
Real anonymization is a much harder, more deliberate process than stripping out a name field. A dataset can still identify individual people through the rest of what it contains.
Read itMay 31, 2026 · 4 min read
Your Health-Check Endpoint Is Probably Public. Check What It Actually Says.
A simple /health or /status route feels harmless by design. Depending on what it prints, it can also be handing over your framework version, your dependency list, or your database connection status for free.
Read itMay 30, 2026 · 4 min read
Is Your Analytics Tool Quietly Collecting Personal Data You Never Meant to Send It?
Adding an analytics or tracking tool is usually a single script tag. What actually gets sent to it, sometimes including things like names and emails typed into a form, is a separate question worth checking.
Read itMay 29, 2026 · 5 min read
What Lets a "One-Time Use" Code Get Redeemed Twice at the Exact Same Moment
A gift card, a promo code, a referral bonus, all checked correctly, one at a time. Fire two redemption requests at the exact same instant, and "checked correctly" doesn't always mean what you think it does.
Read itMay 28, 2026 · 4 min read
Outsourcing Security Entirely vs Building Even a Small In-House Habit
Handing the whole question to an outside reviewer feels efficient. It also means every gap that shows up between engagements has nobody actually watching for it.
Read itMay 27, 2026 · 4 min read
Two Things Happened Today. One's Genuinely Useful. One's a Stat I've Told You Not to Trust.
Anthropic shipped a free security-review plugin for Claude Code today. Separately, the same '62% of AI code has vulnerabilities' figure I flagged as unconfirmed months ago showed up again, in a new post, still without a real source.
Read itMay 26, 2026 · 4 min read
A Few Questions People Have Actually Asked Me Lately, Answered Quickly
Not every question deserves its own full post. A handful of shorter ones worth answering directly, in one place, instead of waiting for each to earn a dedicated day.
Read itMay 25, 2026 · 4 min read
You Added a Rate Limit. Have You Actually Confirmed It Triggers?
A rate limit that's configured but never tested is a common way to feel protected without actually being protected. Here's how to verify it in a few minutes, not just assume it from the config.
Read itMay 24, 2026 · 4 min read
Devin Is Built to Work Independently. That's the Whole Pitch, and the Whole Question.
Cognition's AI software engineer is designed to take a task and run with it, with less back-and-forth than most coding assistants. The more independently an agent operates, the more the authority question matters.
Read itMay 23, 2026 · 4 min read
The Sample Data File I Committed for a Demo Wasn't Actually Sample Data
I needed a realistic CSV to show off an import feature. I grabbed the fastest one available. It took me an embarrassingly long time to notice what that actually meant.
Read itMay 22, 2026 · 4 min read
Using Stripe Doesn't Automatically Make Your Checkout PCI Compliant
A payment processor handles a huge share of the compliance burden for you. It doesn't cover how you build the page around it, and that gap is where a surprising number of small stores actually get it wrong.
Read itMay 21, 2026 · 4 min read
The AI Said the Vulnerability Is Fixed. Did You Actually Check?
A confident, well-written explanation of a fix is not the same thing as the fix actually closing the hole. Here's the two-minute habit that tells the difference.
Read itMay 20, 2026 · 5 min read
GraphQL Makes It Easy to Ask for Exactly What You Want. That Includes Data You Weren't Meant To.
A flexible query language is genuinely convenient to build with. It also comes with a specific set of security questions that a traditional REST API simply doesn't raise in the same way.
Read itMay 19, 2026 · 4 min read
What an "Open Redirect" Actually Lets Someone Do With Your Own Trusted Domain
A small convenience feature, redirect the visitor back to wherever they came from, can turn your own trusted, legitimate domain into a link that lands on someone else's phishing page instead.
Read itMay 18, 2026 · 4 min read
Encrypting Every Field by Default vs Actually Deciding What Needs It
Encrypting everything sounds like the safe, lazy default. It usually isn't lazy at all, and it can quietly break the features that make your app useful in the first place.
Read itMay 17, 2026 · 4 min read
"Least Privilege" Sounds Technical. The Actual Idea Is One Sentence.
It's one of the most-cited principles in security writing, usually explained in a way that makes it sound more complicated than it is. Here's the plain version, and how to actually apply it without a security background.
Read itMay 16, 2026 · 4 min read
The Checklist Hasn't Changed Since January. What I've Actually Watched Change Is Who Runs It Without Being Told To.
Every specific check on this blog was true in the first week of the year. The only real progress worth measuring at this point isn't a new item on the list, it's how automatic the old items have become.
Read itMay 15, 2026 · 4 min read
Changing Your Password Should Log Out Every Other Device. Does Yours?
If someone's account gets compromised and they respond the obvious way, changing their password, that response only actually works if it kicks out whoever was already logged in elsewhere.
Read itMay 14, 2026 · 4 min read
Your Hosting Platform Might Already Be Catching Some of Your Leaked Keys. Here's How to Know What It Actually Covers.
Platforms like Vercel have quietly added their own secret-scanning layer on deployment. It's a real, useful backstop, and it's worth understanding exactly what it does and doesn't cover before relying on it.
Read it