YouTube transcript (XDaohGikIrk) — Transcript
Full transcript
- 0:00As soon as you publish a project on the
- 0:02internet, it becomes a potential target
- 0:04for hacking. Large banks, social
- 0:06networks, and IT companies maintain
- 0:08entire security departments, hire
- 0:10pentesters, and pay for discovered
- 0:11vulnerabilities. And they still get
- 0:13hacked regularly. You have surely seen
- 0:16such news. If even companies with such
- 0:18resources regularly miss
- 0:19vulnerabilities, what chance does a
- 0:21service you built over the weekend in
- 0:23Cursor or Claude Code have? Therefore,
- 0:26the question is not whether your
- 0:27project will be hacked or not, but when
- 0:29it will happen. And the good news is
- 0:31that small projects are broken not by
- 0:32complex attacks, but by the most banal
- 0:34mistakes. That is what we will talk
- 0:36about today. Your real adversaries are
- 0:39automatic scanners looking for known
- 0:40vulnerabilities on sites, as well as
- 0:42script kiddies and slightly more
- 0:44experienced enthusiasts testing tricks
- 0:46they read about in a hacker magazine.
- 0:48And today we will break down the 12
- 0:50most frequent ways services written via
- 0:53AI coding are broken. I will show you
- 0:55how to close each one, and at the end,
- 0:57I will provide a prompt for Claude Code
- 0:58that will check your project for most
- 1:00of these errors, and I will tell you
- 1:02how my own project was hacked and what
- 1:03I did so that my user database did not
- 1:05leak. My name is Evgeny. I have been
- 1:07developing for over 20 years, and here
- 1:09I help launch your SaaS projects and
- 1:11automate tasks using AI coding. Like
- 1:13this video in advance, subscribe, and
- 1:15let's get started. This is the final
- 1:16lesson of my free course on AI coding
- 1:18for launching your own micro-SaaS
- 1:20project. The link to the playlist with
- 1:21all lessons and the course is in the
- 1:22description. And let's start with
- 1:24authorization. Brute force, or password
- 1:26guessing, is a login form without rate
- 1:28limiting, without CAPTCHA, and without
- 1:30timeouts on request frequency. And a
- 1:32scanner can cycle through tens of
- 1:34thousands of username and password
- 1:35combinations in an hour. One matches,
- 1:36and the attacker is already inside your
- 1:38admin panel. Next is credential
- 1:40stuffing, an attack using ready-made
- 1:42username and password pairs. Your
- 1:43client registered an email and password
- 1:45on a fishing forum in 2019, and that
- 1:47forum was leaked online. Now anyone can
- 1:50take that ready-made pair and simply
- 1:51plug it into your service. There is no
- 1:53need to guess anything. The password
- 1:55works on the first try because many
- 1:56people use the same password on
- 1:57different sites. But even perfect
- 1:59authorization does not save you from
- 2:01the next error, because it happens
- 2:03after logging in. This is credential
- 2:04leakage. A database key, a Telegram bot
- 2:07token, or a payment system password is
- 2:08right in the frontend and accessible
- 2:10via "View Source" in a regular browser.
- 2:12Or a file with such passwords and keys
- 2:14was accidentally pushed to a public
- 2:16repository on GitHub. Special scanners
- 2:18comb through the entire GitHub
- 2:19specifically looking for such files and
- 2:21find the key within minutes of
- 2:22publication. And then, an outsider is
- 2:24the first to start profiting from your
- 2:26product. IDOR, or Insecure Direct
- 2:29Object References, occurs when an
- 2:30online store checks that a user is
- 2:32logged in, but fails to check if order
- 2:34number 4521 actually belongs to them.
- 2:37You change the number in the address
- 2:39bar to 452 and see someone else’s
- 2:40entire order: their name, delivery
- 2:42address, and the last digits of their
- 2:43card. Then you just iterate through the
- 2:45numbers and download the profiles and
- 2:47card data of customers, even without
- 2:49being a developer. Improper access
- 2:51control is when you hide the delete
- 2:53user button on the front-end for
- 2:54regular clients and decide that’s
- 2:56enough. In the browser, it’s easy to
- 2:58see what request is sent to the server
- 3:00when an admin clicks that button and
- 3:01send the exact same request directly,
- 3:03without the button itself. The server
- 3:05doesn’t check the role on its end and
- 3:06simply executes the command, deleting
- 3:08the user, even if you aren't an
- 3:09administrator. SQL injection is one of
- 3:11the oldest ways to hack databases.
- 3:13Instead of regular text, a special
- 3:15construction is entered into a search
- 3:16field, for example. And if the database
- 3:18query is constructed incorrectly, the
- 3:20database executes it as a command
- 3:21rather than as text, giving up
- 3:22everything from user lists to passwords
- 3:24. And notice one thing here: none of
- 3:26these methods require a genius hacker.
- 3:28Almost all of this is automated. No one
- 3:30is looking for you specifically. They
- 3:31just run a scanner across thousands of
- 3:33websites in a row and look for where a
- 3:35door for hacking has been left open.
- 3:37And now, a story about how my own
- 3:38project was hacked. In 2008, I launched
- 3:41OPA. It was a blog platform. At its
- 3:43peak, it was getting 1,000 posts a day.
- 3:45It was the largest platform of its kind
- 3:46in the country at the time. "Vibe
- 3:48coding" didn’t even exist back then.
- 3:50I had only been developing for a couple
- 3:51of years myself; I was that classic "
- 3:53mom’s startup" kid, practically a
- 3:54schoolboy. And I was hacked using the
- 3:56exact method I’ll talk about a bit
- 3:58later. Through a file upload, a PHP
- 3:59script was uploaded to the server
- 4:01instead of an avatar. The hacker
- 4:03himself messaged me on ICQ to say that
- 4:04my project was hacked and that he was
- 4:05already downloading the database. I
- 4:07logged into the server and saw that a
- 4:08database dump file was indeed being
- 4:10created in the system folder. But it
- 4:12wouldn’t open via a direct link from
- 4:13the browser yet, which meant they
- 4:14hadn’t managed to download it yet. I
- 4:16asked how he pulled it off, and he
- 4:17answered, honestly explaining that he
- 4:19had uploaded the script disguised as an
- 4:20avatar. It turned out he wasn’t an
- 4:22extortionist; he was just practicing on
- 4:24a popular project. He was just curious
- 4:26if he could hack it. While we were
- 4:27messaging, I deleted his file, patched
- 4:29the hole in the avatar upload, and
- 4:31erased the incomplete dump. The
- 4:32database never leaked. By the way, if
- 4:35you’re as old as I am and know what
- 4:36ICQ is, give this video a like. And for
- 4:39those who don’t, check the comments,
- 4:40and someone will fill you in. And the
- 4:41conclusion I drew for myself was this.
- 4:43Not everyone who finds a vulnerability
- 4:44in your project wants to harm you. Some
- 4:46do it out of curiosity or for practice
- 4:48without any malicious intent. I was
- 4:50lucky back then; the person turned out
- 4:51not to be a blackmailer, but someone
- 4:53who just wanted to test their skills.
- 4:54If someone makes contact and is willing
- 4:56to talk, it sometimes helps to
- 4:58understand the cause of the hack much
- 4:59faster. But of course, you shouldn't
- 5:01rely on this happening every time. The
- 5:02main thing that conversation gave me
- 5:04wasn't that I was hacked, but exactly
- 5:05how I was hacked. Without that, I would
- 5:07have only addressed the symptom, not
- 5:08the vulnerability itself. Therefore,
- 5:09security isn't a list of scary terms,
- 5:11but an understanding of specific attack
- 5:13methods. When you understand the method
- 5:15, you close the hole forever, not just
- 5:16until the next hack. Moving on. And now
- 5:18about money. It's webhook spoofing. The
- 5:21system receives a notification about a
- 5:22successful payment, but it doesn't
- 5:24verify that it truly came from the
- 5:25payment provider, rather than someone
- 5:26else. That's why such a notification is
- 5:28easy to send directly to the server
- 5:30yourself, bypassing the payment itself.
- 5:32The server sees a familiar format and
- 5:33grants access to paid content for free.
- 5:36If your service relies on credit
- 5:37payments and token-based billing via a
- 5:39third-party provider, such a trick can
- 5:40cost you a lot of money. And next,
- 5:42about third-party code inside your own.
- 5:44Unverified libraries; when working on a
- 5:46project, there are almost always
- 5:47third-party packages, and AI installs
- 5:49them indiscriminately. It doesn't look
- 5:51at who the author is or when the last
- 5:52update was. A library might be
- 5:53malicious from the start and steal
- 5:55server data, or it might be legitimate
- 5:57but have a vulnerability for which an
- 5:58update was released long ago. It's just
- 6:00that you haven't updated yet because
- 6:02something broke after the last update.
- 6:04In both cases, the hack happens through
- 6:06code you didn't write, but you were the
- 6:08one who failed to control what you use
- 6:10in your project. And there are two
- 6:11popular ways to enter someone else's
- 6:13account without a password through a
- 6:14browser. The first is XSS. Instead of
- 6:16text, code is pasted into a review or
- 6:18comment field. It then appears for
- 6:20everyone who opens that page, stealing
- 6:22access to their actual accounts. The
- 6:25second is a leaky CORS policy, where
- 6:26your site accepts requests from any
- 6:28external site because it was easier to
- 6:29set up the frontend that way. The user
- 6:32is sent a link to a third-party page,
- 6:34and while they are on it, data is
- 6:35quietly stolen from their open account
- 6:37on your site, without them clicking
- 6:39anything. Uploading a malicious file is
- 6:41that very method from my story. Avatar
- 6:43uploads were allowed, but they only
- 6:45checked the extension in the file name.
- 6:47The malicious script is named "
- 6:48avatar.php". The server saves it to a
- 6:50folder from which it is ready to
- 6:52execute code itself. Inside such a file
- 6:53, they usually hide not an image, but a
- 6:56file manager or editor code that opens
- 6:57access to all files on the server and
- 6:59the database. Then the "image" is
- 7:01opened directly via a link, granting
- 7:03this access. A race condition is when
- 7:05it isn’t anticipated that several
- 7:07requests from one user might arrive at
- 7:10the exact same millisecond. And when
- 7:12100 identical requests fly to the
- 7:13server at once, for example to apply a
- 7:15promo code, it doesn't have time to
- 7:17check the balance between the first and
- 7:18second request and applies multiple
- 7:20codes at once, thus zeroing out the
- 7:22price. And the last thing for today is
- 7:23sensitive data in logs. Passwords,
- 7:25access tokens, and account recovery
- 7:27links are written to logs to make
- 7:28debugging the service easier in the
- 7:29moment, and then people forget to turn
- 7:31them off. Access to logs provides a
- 7:33ready-made set of keys to everything
- 7:34else, even without hacking the database
- 7:36itself. There are 12 methods here, but
- 7:37in total there are over a hundred types
- 7:39of attacks and vulnerabilities. Combine
- 7:40them, and a startup could be left with
- 7:42just a couple of lines of useless code,
- 7:44an empty database, and zero reputation
- 7:46with its very first clients. Each of
- 7:48these twelve methods can be closed with
- 7:50one or two lines of code. Limit the
- 7:52number of attempts, verify the record
- 7:53owner rather than just the login status
- 7:55, and check that the webhook actually
- 7:56came from the payment system. Nothing
- 7:58overly complicated. The problem is that
- 8:00there are over a hundred such checks,
- 8:01and they are scattered throughout the
- 8:02entire project. And every time
- 8:04artificial intelligence adds a new
- 8:05piece of code, you need to re-verify
- 8:07whether it forgot any of them. You
- 8:09don’t need to be a programmer to do
- 8:10this. Modern models are already capable
- 8:12of finding many of these issues
- 8:13themselves, but they almost never check
- 8:15for them unless you specifically ask.
- 8:17And for a hack, all it takes is a
- 8:18single unpatched vulnerability.
- 8:20Therefore, instead of "make a login
- 8:22form," you need to ask specifically: "
- 8:24Make a login form with a limit on
- 8:25attempt counts and protection against
- 8:27brute-force attacks." Remember,
- 8:28manually reciting all these
- 8:30formulations is unrealistic, so I
- 8:31gathered them into a skill. This is a
- 8:33ready-made instruction for Claude Code
- 8:34that you connect to your project once.
- 8:36It forces Claude Code to go through
- 8:38every vulnerability we discussed today,
- 8:39rather than just taking its word that
- 8:41everything is fine. This isn't a
- 8:43one-time check before launch; it’s
- 8:45something that must be done regularly,
- 8:46checking not just the whole application
- 8:48, but each new module separately as
- 8:50soon as it's written. The more code you
- 8:52give it to check at once, the easier it
- 8:54is for it to miss something. So, if you
- 8:56wrote a payment form, ask it to check
- 8:58just that for vulnerabilities and fix
- 9:00everything it finds, instead of putting
- 9:02it off until a general project audit.
- 9:03There is also a nuance here: such an
- 9:05instruction cannot be identical for
- 9:07every project. You have your own stack
- 9:08and your own libraries. That’s why I
- 9:10take this skill as a base and ask
- 9:12Claude to analyze my specific project
- 9:13to assemble separate rules tailored
- 9:15exactly to my stack. Just like with any
- 9:17other skill, you take my version as a
- 9:19base and adapt it for yourself. You can
- 9:21grab the skill itself on Telegram, as
- 9:22usual, the link is in the description.
- 9:24If you are launching your project now
- 9:26and want to get it to real clients
- 9:27instead of leaving it sitting in a
- 9:29drawer, join my club for founders. If
- 9:31you need personal help with development
- 9:32and launch, contact information for my
- 9:34services is also in the description.
- 9:35Like and subscribe, and I'll see you in
- 9:37the next video. M.
About this transcript
This page contains the full transcript of YouTube transcript (XDaohGikIrk) , generated from the public captions YouTube serves with the video. The transcript has 2,186 words across 333 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to choose a caption track available on the video.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, caption language selection, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.