Перейти до вмісту

Основи безпеки

Сканер безпеки для vibe coding: чого не бачить скан URL

Сканер безпеки для vibe coding читає ваш робочий застосунок ззовні. Що це охоплює, чотири речі, яких він не бачить, і як читати результат.

Vlad Tkachenko8 хв читання
Освітлене вікно застосунку прямо перед вами, а за ним ще два вікна, що відступають у тінь і лишаються нечитними.

Коротко

  • Сканер безпеки для vibe coding читає те, що браузери ваших відвідувачів і так завантажують: ваш бандл, ваші заголовки, ваш сертифікат і відповіді, які ваша база даних дає незнайомцю.
  • Це охоплює саме той клас помилок, які найчастіше трапляються під час побудови з ШІ. І не охоплює нічого з того, що відбувається на вашому сервері.
  • Чистий результат означає, що кожне питання, яке скан міг поставити ззовні, повернулося чистим. Сприймайте це як на один клопіт менше.

Ви вставляєте адресу свого застосунку в сканер, чекаєте секунд двадцять, і повертається літера. A, можливо C. А далі надходить питання, яке справді важить: чи означає це, що з моїм застосунком усе гаразд?

Ось та частина, яку більшість інструментів цієї категорії лишають вам з'ясувати самотужки. Сканер безпеки для vibe coding читає ваш застосунок з вулиці. Він бачить те, що бачить браузер будь-якого відвідувача, а це чимало, і зупиняється біля ваших вхідних дверей. Те, що ваш сервер робить непублічно, лишається непублічним і для нього.

Знати, де проходить ця межа, і є тим, що робить скан вартим запуску. Літера A каже вам, що двері, звернені до вулиці, були зачинені тоді, коли ми дивилися, і не каже нічогісінько про кімнату за ними.

Що таке сканер безпеки для vibe coding?

Інструмент, який завантажує ваш робочий застосунок так само, як це зробив би відвідувач, а потім читає те, що повернулося.

Ви даєте йому URL. Він не просить ані вихідного коду, ані репозиторію, ані пароля до бази даних, ані акаунта в білдері, яким ви користувалися. Він забирає вашу сторінку, дає JavaScript відпрацювати, щоб побачити код, який ваш застосунок насправді віддає, читає заголовки, що прийшли з відповіддю, дивиться на ваш сертифікат і ставить вашій базі даних і вашому сховищу файлів кілька питань, які міг би поставити будь-який незнайомець.

Далі він записує, що відповіло. Ось і вся форма цієї справи, і саме тому вона триває двадцять секунд, а не тиждень.

Ця категорія існує тому, що застосунки, зроблені в Lovable, Bolt, v0, Cursor, Replit, Windsurf і Base44, ламаються в тій самій невеликій кількості місць, і майже всі ці місця видно ззовні. Секретний ключ у бандлі. Таблиця, що відповідає незнайомцю. Бакет сховища, який перелічує власний вміст. Нікому не потрібен ваш вихідний код, щоб знайти будь-що з цього, бо ваш застосунок сам подає їх кожному відвідувачу.

Що скан читає насправді

П'ять поверхонь, і чотири з них ваші ж відвідувачі завантажують, не помічаючи.

Що він читаєЗвідки це беретьсяЩо це виловлює
Ваш бандл JavaScriptФайли, які браузер завантажує, щоб запустити ваш застосунокКлючі, віддані браузеру, шляхи API, які він викликає, назви таблиць, які він вживає
Ваші заголовки відповідіІдуть з кожною сторінкою, яку віддає ваш хостингВідсутні захисти браузера, правило, що відповідає на запити з будь-якого сайту
Відповіді вашої базиТой самий API проєкту, який викликає ваш власний застосунокТаблиця, що віддає рядки запиту, у якому ніхто не залогінений
Ваші бакети сховищаТой самий публічний API сховища, через який вантажить застосунокБакет, який перелічує власні файли незнайомцю
Сертифікат і доменРукостискання TLS і публічний запис у реєстріСертифікат, що ось-ось спливе, домен, що ось-ось згасне
П'ять поверхонь доходять до браузера, тож скан може їх прочитати. Чотири за рискою ніколи не залишають ваш сервер, тож ніщо ззовні їх не прочитає.

Бандл це той, що дивує людей. Код вашого застосунку мусить дійти до браузера, перш ніж там запуститися, тож туди доходить і кожен ключ усередині нього, разом зі шляхами API, які він викликає, і часто назвами таблиць, які він читає. Сканер натискає ту саму F12, яку натиснув би допитливий відвідувач. Він лише швидший, і читає всі файли, а не перший.

Питання до бази даних це те, від якого всі чекають вторгнення, і воно найлагідніше в цьому списку. Щоб дізнатися, чи читається таблиця для незнайомців, наш просить в API кількість рядків і читає число із заголовка відповіді. Кількість більша за нуль означає, що ті рядки досяжні. Жодного рядка ніколи не забирають, а ключ, яким він питає, це публікований ключ, що вже лежить у вашому бандлі й має там бути.

Чотири речі, яких скан URL не бачить

Усе, що відбувається на вашому сервері, бо нічого з цього ніколи не надсилають браузеру.

Ваш серверний код. Edge-функції, маршрути API, функції бази даних, усе, що працює всередині Supabase чи на вашому хостингу. Сканер може викликати ендпоінт і прочитати те, що повернулося. Прочитати код, який це створив, він не може, тож помилка, що виринає лише на певних вхідних даних, лишається невидимою.

Ваші змінні середовища. Ключі, які ви лишили на сервері, і саме там їхнє місце. Скан може сказати вам, що не знайшов секрету у вашому бандлі. Підтвердити, що секрет зберігається правильно, він не може, бо ніколи не бачить того місця, де ви його зберегли.

Вашу історію версій. Ключ, який ви закомітили в березні й прибрали у квітні, зник із застосунку й далі лежить у вашому репозиторії. Кожен, хто бачить той репозиторій, і далі може його прочитати, і скільки не дивись на ваш робочий сайт, він там не виявиться.

Логіку вашого власного застосунку. Чи може залогінений користувач відкрити чуже замовлення, змінивши число в адресі. Чи прийме форма ціну, яку надіслав їй браузер. Це рішення, які ваш застосунок ухвалює про те, що дозволено, і щоб їх упіймати, треба ввійти в акаунт і пробувати різне, а це тест на проникнення.

Є п'ята межа, яка належить нам, а не категорії, і її варто знати, перш ніж читати котрийсь із наших звітів. Supabase більше не віддає публікованому ключу перелік таблиць проєкту, тож сканер не має способу запитати, як звуться ваші таблиці. Натомість наш працює з трьох джерел: індекс проєкту на старіших проєктах, де він ще відповідає, назви таблиць, які він знаходить у вашому ж бандлі, і список із двадцяти шести назв, поширених у застосунках на vibe coding. Відкриту таблицю з незвичною назвою, яка ніколи не трапляється у вашому фронтенд-коді, ми не дістанемо. Власний advisor Supabase її дістає, і про це порівняння двома розділами нижче.

Чи означає чистий скан, що мій застосунок захищений?

Ні. Це означає, що кожне питання, яке скан міг поставити ззовні, повернулося чистим, а це менше речення, ніж здається.

Частина причини це чотири сліпі зони вище. Друга частина в тому, що перевірка може завершитися трьома способами, і лише один з них це пройдено. Перевірка щось знаходить. Перевірка питає й отримує чітке ні. Або перевірка не отримує жодної відповіді, бо запит вичерпав час, хост його відхилив чи сторінка так і не довантажилася.

Шукати треба саме третє завершення. Перевірку, яка не отримала відповіді, малюють як відсутність відповіді, бо галочка там це обіцянка щодо питання, якого ніхто не зміг поставити.

Саме це третє завершення вирішує, чи можна довіряти звіту, і саме його найлегше тихцем округлити до галочки. Наш пише в рядку «Не вдалося перевірити» і лишає вашу оцінку в спокої. Фальшива галочка була б найшкідливішим, що цей сканер міг би вивести на екран, бо ви б за нею діяли.

Та сама чесність робить наші власні опубліковані числа менш тривожними, ніж вони здаються на перший погляд. Між 12 і 14 серпня 2026 року ми прогнали ці перевірки на 30 998 робочих застосунках на vibe coding, і 99 % повернулися щонайменше з однією знахідкою. Майже все це один рядок: заголовки безпеки браузера, які хостингова платформа ніколи не виставляє і які більшість власників на піддомені білдера не можуть увімкнути самі. Рахувати їх правильно. Читати ці 99 % як «майже кожен застосунок у небезпеці» неправильно.

Скан URL, скан репозиторію чи власний advisor Supabase?

Вони читають три різні речі, тож корисне питання таке: котрий з них здатен побачити саме вашу проблему.

ВидЩо читаєЩо просить у васДе сліпий
Сканер URLВаш робочий застосунок, ззовніURLУсе, що ваш сервер лишає при собі
Сканер репозиторіюВаш вихідний код і його історіюДоступ до репозиторіюЧи цей код опубліковано і що ваші правила роблять у роботі
Supabase Security AdvisorКонфігурацію того самого проєктуВаш акаунт SupabaseУсе поза проєктом: бандл, заголовки, інші постачальники

Вони перетинаються значно менше, ніж підказують назви. Advisor Supabase проходить ваш проєкт і повідомляє про проблеми конфігурації, зокрема про таблиці з неправильно налаштованою Row Level Security. Скан URL читає наслідок, тобто чи доходять ті рядки до незнайомців просто зараз. Ці двоє розходяться частіше, ніж можна було б очікувати, бо увімкнути налаштування ще не означає бути захищеним.

Сканер репозиторію єдиний з трьох, хто здатен знайти ключ, який ви видалили минулого місяця. Він же єдиний, хто не може сказати вам, чи той код, який він щойно прочитав, це той код, який ви опублікували.

Як читати оцінку

Літеру обмежує найгірша окрема знахідка у звіті, тож добрі бали ніколи не рятують серйозну знахідку.

Кожен скан починається зі 100. Критична знахідка коштує 40 балів, висока 15, середня 5, низька 1. Далі над арифметикою сідає стеля: одна критична знахідка обмежує оцінку до D, дві обмежують до F, а одна висока обмежує до C. Загалом охайний застосунок з однією відкритою таблицею виходить на D, і так і задумано.

Те, що ви зробили правильно, потрапляє у звіт і нічого вам не коштує. Ваш публікований ключ Supabase, що лежить у бандлі, зазначено як правильний, бо саме для цього він і є, а помалювати його червоним це спосіб, у який інструмент привчає вас ігнорувати червоне.

Що робити з результатом скану

Що робити

  • Спершу прочитайте рядки, де написано «Не вдалося перевірити». Це питання, які лишилися відкритими, і це не пройдено.
  • Працюйте за серйозністю. Критична знахідка означає, що до ваших даних можна дістатися вже сьогодні; відсутній заголовок це налаштування, якого ніхто не ввімкнув.
  • Внутрішнім боком займіться окремо: тримайте секретні ключі на сервері, перешукайте власну історію версій на предмет видалених ключів і ввійдіть тестовим користувачем, щоб побачити, докуди він дістає.
  • Скануйте знову після кожної публікації і щоразу, коли хтось чіпає правило бази даних. Це та зміна, про яку вас ніщо не попередить.
  • Якщо ваш застосунок приймає платежі чи тримає медичні дані, колись замовте тест на проникнення. Автоматична зовнішня перевірка це не аудит, і жодна відсутність знахідок не є гарантією.

Наш безкоштовний сканер безпеки сайту виконує дев'ять перевірок лише на читання для будь-якої робочої URL, приблизно за двадцять секунд і без акаунта. Він читає, ніколи не записує й ніколи не входить в акаунт.

Якщо ви радше пройдете це спершу руками, то 10-хвилинний чекліст безпеки охоплює те саме поле в тому порядку, у якому це варто робити.

Поширені запитання

Що таке сканер безпеки для vibe coding?

Інструмент, який завантажує ваш робочий застосунок так само, як це зробив би відвідувач, і читає те, що повернулося: JavaScript, який ваш застосунок віддає браузеру, заголовки, які додає ваш хостинг, сертифікат, а також відповіді, які ваша база даних і ваше сховище файлів дають запиту від незнайомця. Йому потрібна URL і більше нічого. Він повідомляє про те, що знайшов на публічній поверхні вашого застосунку, а саме там застосунки, зроблені з ШІ, найчастіше й ламаються.

Чи безпечно сканувати власний застосунок?

Так, якщо сканер лише читає. Наш робить такі самі запити, як звичайний відвідувач, ніколи не входить в акаунт, ніде нічого не записує, не створює й не видаляє і ніколи не завантажує дані ваших користувачів. Щоб перевірити, чи читається таблиця бази даних, він запитує кількість рядків і читає число, не забираючи жодного рядка. Увесь трафік це жменька запитів, тобто менше, ніж одна людина, яка хвилину ходить вашим сайтом.

Чи потрібен скану мій вихідний код або пароль до бази даних?

Ні. Сканер URL працює цілком ззовні, тож нема чого підключати й нема яких облікових даних передавати. У цьому ж і його межа: він бачить лише те, що ваш застосунок і так показує кожному відвідувачу. Інструмент, який читає ваш репозиторій або підключається до акаунта вашої бази даних, бачить інші речі, і стаття вище ставить усі три поруч.

Чи працює це з Lovable, Bolt, Cursor, Replit, v0, Windsurf і Base44?

Так, і з усім іншим, що виставляє сайт в інтернет, бо скан дивиться на те, що опубліковано, а не на те, що це написало. Білдер важить для виправлення, а не для перевірки: полагодити відкриту таблицю у Lovable це інша послідовність кліків, ніж у Replit, і саме тому текст виправлення називає ваш білдер.

Чого сканер безпеки не перевіряє?

Усього, що лишається на вашому сервері. Ваш серверний код і функції бази даних, змінні середовища, які ви тримали поза браузером, ключ, який ви закомітили й потім видалили з репозиторію, і помилки вашої власної логіки, наприклад коли залогінений користувач може відкрити чуже замовлення, змінивши число в адресі. Щоб знайти останню групу, треба ввійти в акаунт і пробувати різне, а це вже тест на проникнення, а не скан.

Чи безкоштовний сканер безпеки для vibe coding?

Наш безкоштовний, принаймні сам скан: ви отримуєте оцінку, бали й кількість знахідок на екрані приблизно за 20 секунд, без акаунта, а докладні знахідки з виправленнями після того, як залишите адресу електронної пошти. Платні плани існують для того, чого разовий скан не вміє, а саме помітити, що наступного місяця щось змінилося. Оцінка правдива в ту секунду, коли ви її отримали.

Автор

Vlad Tkachenko

Засновник Reeve

Я щодня дивлюся на застосунки, зібрані в Lovable, Bolt, v0, Cursor і Replit, і на короткий список помилок, які трапляються в них знову і знову.

Більше про автора

Читати далі

Усі статті

Не впевнені, як справи у вашому застосунку?

Запустіть безкоштовне сканування й отримайте зрозумілу оцінку від A до F приблизно за 20 секунд. Без облікового запису й без картки.

Сканувати безкоштовно

Автоматична зовнішня перевірка, а не повний аудит. Відсутність знахідок не є гарантією безпеки.