
klöss @kloss_xyz
the 25 most common security mistakes vibe coders are making right now (save these so you can avoid them) 1. I’ve seen this blow up so many projects: The model is trying to get your code to run, not make it secure. The second it works, you stop checking. 2. You’re prompting for features and never for security, so if you didn’t ask for it, it didn’t build it. 3. You got 80 lines of code back and accepted all of it without reading it because it worked first try. One bad line buried in working code is how vulnerabilities ship. 4. When you ask it to fix a bug it’ll sometimes “fix” it by turning off the security check causing the error. Review every fix, especially the ones that magically solve everything. 5. When you accept a code change, check what else got touched because it’ll quietly change a security setting three files away. 6. You fixed a security issue in message 12 and by message 50 it’s reintroduced the same vulnerability. Keep a running list of fixes and paste it back in. 7. If your security decisions aren’t in your project docs, every new session starts from zero. Write what you’re building and what needs protecting into your markdown files. 8. Every API key you paste into a chat is being logged somewhere. Put them in environment variables and reference the name, never the value. 9. If any variables got prefixed with NEXT_PUBLIC_ or VITE_ your secret keys are in your frontend code and anyone with dev tools can see them. 10. Don’t let it build your login system from scratch because it will look right and pass every test but have holes you won’t find until someone else does. 11. Models hallucinate package names and attackers publish malicious packages under those exact fake names. Search every package yourself before installing. 12. You’ll occasionally get back entire security systems that are completely made up. If it’s not in official docs it was invented. 13. Hiding a button in the UI doesn’t mean the endpoint is protected. Anyone with a browser console can skip your frontend and hit your backend directly. 14. Your database and file storage are probably both wide open right now because public access is the default. Lock both down so users only touch their own data. 15. You probably have no rate limiting and no API spending cap because neither got added. One script can drain your budget in an hour and one runaway loop is a four figure bill by morning. 16. If you’re processing payment webhooks without verifying they’re from your provider, anyone can fake a “payment successful” event and give themselves free access. 17. When your app crashes and the error page shows stack traces and database info you’re handing attackers a map of your system. Turn off debug mode. 18. What you’re getting back is a demo not a production app, so treat everything as a rough draft that needs a security review. 19. Your .env file is probably already in your commit history and adding .gitignore now doesn’t erase it. Rotate every exposed key. 20. After a build, run a security audit because the code is based on training data not live vulnerability databases. 21. You probably have no logs on who deleted what or changed permissions, so when something goes wrong you’ll have no trail. Set up logging now. 22. If you’re using a model as your only security reviewer it’s giving you false confidence. Use a real scanning tool. 23. Your backups either don’t exist or you’ve never tested restoring one. If your database goes down without this everything is gone. 24. If your test and production environments are the same thing then test webhooks are hitting your real database. Separate those today. 25. Go back and review what got scaffolded when your project was set up because that boilerplate has default configs and wide open permissions baked in. I’ve seen projects blow up from half of these and caught a bunch in my own vibe coded apps too. Lock these things down before you launch, not after someone reminds you why you should have.
Sort: