[{"data":1,"prerenderedAt":862},["ShallowReactive",2],{"blog-uk-lovable-security-scan":3,"blog-index-uk":515},{"id":4,"title":5,"body":6,"category":472,"cover":473,"coverAlt":474,"description":475,"draft":476,"extension":477,"faq":478,"image":493,"keywords":494,"meta":504,"navigation":505,"ogTitle":5,"path":506,"published":507,"seo":508,"stem":509,"tldr":510,"updated":507,"__hash__":514},"blog_uk\u002Fblog\u002Flovable-security-scan.md","Сканування безпеки Lovable: чого воно не доведе",{"type":7,"value":8,"toc":458},"minimark",[9,13,21,26,29,39,53,59,63,66,69,84,87,91,94,97,100,112,116,119,122,128,135,139,142,145,163,170,175,186,189,197,201,204,223,226,328,335,339,342,370,373,378,389,393,396,399,406,418,422,450],[10,11,12],"p",{},"Ви натискаєте Publish у своєму застосунку на Lovable, і перш ніж він вийде,\nзапускається сканування. За кілька секунд воно повертається чистим або\nповертається зі списком, і в обох випадках у вас у руках результат, який ви\nніяк не можете оцінити. Це все? Цього досить, щоб пускати туди справжніх людей?",[10,14,15,16,20],{},"І ось те, що варто знати, перш ніж вирішувати: ",[17,18,19],"strong",{},"сканування безпеки Lovable і\nсканування вашого опублікованого застосунку читають дві різні речі."," Одне\nчитає замки й проводку. Інше підходить і натискає ручку. Обидва варті того, і\nлише друге робить те, що весь день робить кожен відвідувач вашого застосунку.",[22,23,25],"h2",{"id":24},"чи-перевіряє-lovable-мій-застосунок-на-проблеми-з-безпекою","Чи перевіряє Lovable мій застосунок на проблеми з безпекою?",[10,27,28],{},"Так, і їх два. Обидва безкоштовні.",[10,30,31,34,35,38],{},[17,32,33],{},"Quick scan"," запускається сам щоразу, коли ви публікуєте, і завершується за\nсекунди. ",[17,36,37],{},"Deep scan"," читає весь код вашого застосунку, і запускаєте його ви.\nОбидва читають ваш проєкт зсередини: налаштування бази, правила доступу на\nваших таблицях, дерево залежностей, код.",[10,40,41,42,49,52],{},"Усе, що нижче, прочитано у\n",[43,44,48],"a",{"href":45,"rel":46},"https:\u002F\u002Fdocs.lovable.dev\u002Ffeatures\u002Fsecurity",[47],"nofollow","власній документації Lovable про безпеку",[17,50,51],{},"24 вересня 2026 року",". Ця функція змінювалася за рік не раз, тож дивіться на\nдату будь-якої статті, яка її описує, включно з цією.",[54,55],"diagram",{"alt":56,"caption":57,"src":58},"Дві панелі. На лівій у коробці в один ряд стоять база даних, документ, знак коду і стос ліній, а під ними всередині коробки стоїть велика лупа. На правій опублікована сторінка надсилає стрілку до бази даних, що стоїть поза нею, троє відвідувачів чекають з іншого боку, а лупа такого самого розміру стоїть просто неба серед них.","Два сканування, два місця, де можна стати. Те, що в коробці, може відкрити в проєкті будь-що. Те, що на вулиці, може лише спитати застосунок, що він віддає, і саме це роблять троє людей поруч із ним.","\u002Fblog\u002Flovable-security-scan\u002Ftwo-vantage-points-1600x700.png",[22,60,62],{"id":61},"що-перевіряє-сканування-безпеки-lovable","Що перевіряє сканування безпеки Lovable",[10,64,65],{},"Три ділянки, як фіксований набір перевірок, за секунди, під час кожної\nпублікації.",[10,67,68],{},"Документація Lovable називає їх оглядом бази даних, аудитом залежностей і\nперевіркою сервера MCP. Огляд бази даних це те, що важить для цієї статті, і\nйого опис варто прочитати повільно: він охоплює таблиці без контролю доступу до\nокремого запису, тобто без Row Level Security, а також правила доступу, які\nпропускають усіх, і вимкнений захист від викрадених паролів. Аудит залежностей\nшукає відомі вразливості у ваших пакетах npm. Перевірка MCP шукає сервер MCP,\nякий ваш застосунок віддає назовні без автентифікації.",[10,70,71,72,75,76,79,80,83],{},"Знахідки повертаються згрупованими за ділянками і позначеними як ",[17,73,74],{},"Critical",",\n",[17,77,78],{},"Warning"," або ",[17,81,82],{},"Info",". Сканування спрацьовує автоматично з діалогу\nпублікації, і ви також можете запустити його з розділу Security у проєкті.",[10,85,86],{},"Деякі тексти називають це Basic scan. Кнопка в розділі Security сьогодні каже\nRun quick scan, тож якщо стаття і ваш екран не сходяться в назві, актуальний ваш\nекран.",[22,88,90],{"id":89},"що-додає-deep-scan","Що додає Deep scan",[10,92,93],{},"Він читає весь код вашого застосунку і не запускається сам.",[10,95,96],{},"Deep scan містить усе з Quick scan, а потім дивиться на вашу власну логіку, ваші\nдозволи й ваші дані. Lovable перелічує сім ділянок: контроль доступу й\nавторизація, неавтентифіковані та придатні до зловживання точки входу, небезпечне\nвведення та ін’єкції, витік секретів і облікових даних, платежі й рахунки,\nавтентифікація та безпека акаунтів, а також відкриті персональні й чутливі дані.\nВін теж безкоштовний.",[10,98,99],{},"Речення з документації, за яким справді треба діяти, таке: Deep scan не\nзапускається автоматично, поки ви працюєте. Він запускається тоді, коли ви його\nзапускаєте. У проєкті, де його ніколи не запускали, код ніколи не читали, хоч би\nскільки разів проєкт публікували, і діалог публікації вам про це не скаже.\nРобочі простори Enterprise можуть планувати Deep scan для вибраних проєктів у\nWorkspace Security center, і це єдина конфігурація, де воно стається без того,\nщоб хтось згадав.",[10,101,102,103,106,107,111],{},"Lovable також може спробувати виправити знайдене, поки ви будуєте або через\n",[17,104,105],{},"Try to fix all"," у розділі Security. Прочитайте, що змінило виправлення, перш\nніж його прийняти. Полагодження, від якого зникає помилка row level security, це\nдуже часто політика, яка пропускає всіх, і така політика\n",[43,108,110],{"href":109},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","задовольняє перевірку й лишає таблицю відкритою",".",[22,113,115],{"id":114},"претензія-2025-року-і-що-змінилося","Претензія 2025 року і що змінилося",[10,117,118],{},"Перша версія цієї перевірки казала вам, що політика існує. Вона не казала, чи\nполітика працює, і дослідник, який знайшов початкову проблему, тоді ж написав це\nсам.",[10,120,121],{},"У травні 2025 року Метт Палмер оприлюднив CVE-2025-48757 про застосунки Lovable,\nу яких таблиці Supabase не мали row level security або мали його написаним надто\nшироко. Відповіддю Lovable стала перевірка перед публікацією. Власний текст\nПалмера описав її межу в одній дужці:",[123,124,125],"blockquote",{},[10,126,127],{},"Функція Publish у Lovable допомагає переконатися, що політики RLS увімкнені на\nвсіх таблицях, і повідомляє, коли це не так (але не обов’язково показує, чи\nвони достатні).",[10,129,130,131,111],{},"На цю прогалину чинна документація дає відповідь: вона прямо називає правила\nдоступу, які пропускають усіх, серед того, що позначає огляд бази даних. Ніщо в\nцій статті не перевіряє це твердження. Якщо хочете перевірити, створіть\nодноразову таблицю з політикою, яка пропускає всіх, і подивіться, чи сканування\nїї назве. Довга версія CVE є в\n",[43,132,134],{"href":133},"\u002Fblog\u002Fis-lovable-safe","чи безпечний Lovable",[22,136,138],{"id":137},"чого-не-доведе-сканування-зсередини","Чого не доведе сканування зсередини",[10,140,141],{},"Чи віддає ваш живий застосунок рядки тому, хто не увійшов у акаунт.",[10,143,144],{},"Замок може бути встановлений, внесений у перелік і правильний на кресленні, а\nдвері однаково відчиняться. Політика це заява про те, що має статися; те, що\nвирішує, що стається насправді, це запит. Три способи, якими правило рахується\nнаявним, а таблиця все одно відповідає:",[146,147,148,157,160],"ul",{},[149,150,151,152,156],"li",{},"Політика пропускає всіх. Записана як ",[153,154,155],"code",{},"using (true)",", вона є чинною політикою,\nвона задовольняє вимогу, щоб політика існувала, і повертає кожен рядок кожному,\nхто звернувся.",[149,158,159],{},"Політика покриває читання і більше нічого. Select перевіряється, insert,\nupdate і delete ніхто не писав, тож будь-хто може писати в таблицю, яку ніхто\nне може прочитати повністю.",[149,161,162],{},"Умова збігається з більшою кількістю людей, ніж мала. Вона мала назвати одного\nклієнта, а називає кожного відвідувача з відкритою сесією, або кожного\nвідвідувача.",[10,164,165,166,169],{},"Тепер частина, яка вирішує, як читати зелений результат. ",[17,167,168],{},"Ззовні ці три випадки\nй таблиця взагалі без захисту дають однакову відповідь",", і це рядки. Ваші\nкористувачі їх не розрізняють. Усі інші, хто відкриє ваш застосунок, теж ні.",[54,171],{"alt":172,"caption":173,"src":174},"Ланцюжок зліва направо: людина, стрілка до опублікованої сторінки, стрілка до бази даних і червона стрілка до панелі з трьома рядками даних. Уздовж лінії немає жодного ключа й жодного замка. Під сторінкою, намальована блідо й ні з чим не з’єднана, стоїть коробка проєкту з базою даних, документом, знаком коду і стосом ліній.","Запит, який усе вирішує, і рядки, з якими він повернувся. Проєкт стоїть під сторінкою і ніде не торкається лінії, і саме тому ніщо всередині нього не відповість за те, що тут сталося.","\u002Fblog\u002Flovable-security-scan\u002Fthe-request-that-decides-1600x560.png",[10,176,177,178,181,182,111],{},"Між 12 і 14 серпня 2026 року ми прогнали ті самі дев’ять зовнішніх перевірок по\n30 998 живих застосунках, і 18 554 з них були опубліковані на Lovable. Серед\nзастосунків Lovable, які називали проєкт Supabase, 3 553 відповіли нам досить\nчітко, щоб їх оцінити, і ",[17,179,180],{},"2 017 із них віддали рядки на запит, який не ніс\nжодного входу в акаунт",". Метод і кожен знаменник є\n",[43,183,185],{"href":184},"\u002Fresearch\u002Fvibe-coded-app-security-2026","у звіті",[10,187,188],{},"Одне чесне застереження до цього числа. Ми стояли на тротуарі, і ми не маємо\nжодного погляду всередину цих проєктів. Ми можемо повідомити, що відповіли 2 017\nопублікованих застосунків. Ми не можемо повідомити, скільки з них запускали\nсканування і що воно їм сказало.",[10,190,191,192,196],{},"Ваш власний застосунок відповідає на те саме питання приблизно за 20 секунд, і\nвам не треба вірити нам на слово, з якого боку від 2 017 він опиниться:\n",[43,193,195],{"href":194},"\u002Fsecurity-scanner","просканувати застосунок",". Сканування питає в кожної таблиці\nкількість рядків, які отримав би той, хто звернувся без входу в акаунт, читає це\nчисло і на цьому спиняється, не витягуючи жодного рядка.",[22,198,200],{"id":199},"чого-не-побачить-сканування-ззовні","Чого не побачить сканування ззовні",[10,202,203],{},"Натиснути ручку не скаже вам нічого про кімнату, яка не має дверей на вулицю, а\nтаких чотири.",[10,205,206,207,210,211,214,215,218,219,222],{},"Ваше ",[17,208,209],{},"дерево залежностей npm"," не лежить на сторінці, яку завантажує браузер.\nВаш ",[17,212,213],{},"серверний код",", включно з edge functions і тим, чи перевіряє маршрут, хто\nзвертається, працює там, куди ми ніколи не дістаємося. ",[17,216,217],{},"Таблиця, яку ваш\nфронтенд ніколи не називає",", для нас невидима, бо ми знаходимо назви таблиць у\nкоді, який віддає ваш застосунок, плюс короткий перелік поширених назв: таблицю,\nякої в браузері немає ніде і яку ніхто не вгадав би, ми просто не питаємо. А\n",[17,220,221],{},"сервер MCP"," не є тим, що знаходить запит сторінки.",[10,224,225],{},"Два сканування Lovable разом читають усі чотири. Наше пише «Не вдалося\nперевірити», коли воно не змогло відповісти на питання, замість галочки.",[227,228,229,245],"table",{},[230,231,232],"thead",{},[233,234,235,239,242],"tr",{},[236,237,238],"th",{},"Про що йдеться",[236,240,241],{},"Сканування Lovable, зсередини",[236,243,244],{},"Сканування ззовні",[246,247,248,260,271,282,291,300,309,318],"tbody",{},[233,249,250,254,257],{},[251,252,253],"td",{},"Row level security вимкнено на таблиці",[251,255,256],{},"Так",[251,258,259],{},"Лише за наслідком",[233,261,262,265,268],{},[251,263,264],{},"Політика, яка пропускає всіх",[251,266,267],{},"Так, за їхньою документацією",[251,269,270],{},"Так, за рядками",[233,272,273,276,279],{},[251,274,275],{},"Що ваш опублікований застосунок віддає незнайомцю",[251,277,278],{},"Ні",[251,280,281],{},"Так, це вся робота",[233,283,284,287,289],{},[251,285,286],{},"Ваші залежності npm",[251,288,256],{},[251,290,278],{},[233,292,293,296,298],{},[251,294,295],{},"Серверний код і автентифікація edge functions",[251,297,256],{},[251,299,278],{},[233,301,302,305,307],{},[251,303,304],{},"Таблиця, яку ваш фронтенд ніколи не називає",[251,306,256],{},[251,308,278],{},[233,310,311,314,316],{},[251,312,313],{},"Який ключ опинився в коді, що його завантажують відвідувачі",[251,315,256],{},[251,317,256],{},[233,319,320,323,326],{},[251,321,322],{},"Дата сертифіката, дата домену і заголовки сторінки",[251,324,325],{},"Немає в їхньому переліку",[251,327,256],{},[10,329,330,331,111],{},"Рядок про те, що ваш опублікований застосунок віддає незнайомцю, і є причиною\nзапускати обидва, і саме навколо нього побудоване наше сканування. Загальна\nверсія того, де закінчується погляд ззовні, є в\n",[43,332,334],{"href":333},"\u002Fblog\u002Fvibe-coding-security-scanner","що пропускає сканування за URL",[22,336,338],{"id":337},"обидва-і-в-такому-порядку","Обидва, і в такому порядку",[10,340,341],{},"Сканування зсередини перед публікацією, зовнішнє після неї, бо саме в такому\nпорядку ці дві речі стаються.",[343,344,345,351,357,362],"ol",{},[149,346,347,350],{},[17,348,349],{},"Дайте Quick scan відпрацювати під час публікації, а тоді прочитайте його.","\nЦе кілька секунд, і воно однаково відбувається. Проклацати діалог це\nнайпоширеніший шлях, яким знахідка Critical потрапляє в продакшн.",[149,352,353,356],{},[17,354,355],{},"Запустіть Deep scan перед тим, як щось справжнє піде в люди",", і ще раз\nпісля того, як додасте вхід, платежі чи будь-яку таблицю з людьми. Сам він не\nзапуститься.",[149,358,359],{},[17,360,361],{},"Опублікуйте.",[149,363,364,367,368,111],{},[17,365,366],{},"Проскануйте опубліковану адресу ззовні."," Наше читає ваш живий застосунок\nтак, як його читає відвідувач, триває близько 20 секунд, не потребує акаунта\nі називає перевірки, які не змогло завершити:\n",[43,369,195],{"href":194},[10,371,372],{},"У цій послідовності є проміжок, і саме з ним варто рахуватися. Quick scan\nпрацює, коли ви публікуєте. Більшість того, що відкриває таблицю, взагалі не\nпроходить через публікацію: ви змінюєте налаштування в панелі Supabase, ви\nопівночі приймаєте політику, яку асистент написав у вікні чату, ви створюєте\nтаблицю зранку, а екран, що її читає, виходить у четвер. Ніщо з цього не є\nпублікацією, тож ніщо з цього не запускає сканування, а Deep scan і так ніколи\nне запустився б сам.",[54,374],{"alt":375,"caption":376,"src":377},"Горизонтальна лінія часу з трьома бірюзовими крапками, кожна з яких сполучена вгору з лупою в колі. Між другою і третьою стоїть бурштинова крапка, сполучена вниз з перемикачем налаштувань, і від неї лінія стає бурштиновою до самого кінця, проходячи просто під третьою лупою.","Кожна публікація запускає сканування. Налаштування, змінене в панелі Supabase, публікацією не є, і бурштин тягнеться далі повз наступну, бо те сканування читає проєкт, а не таблицю.","\u002Fblog\u002Flovable-security-scan\u002Fwhen-each-one-runs-1600x600.png",[10,379,380,384,385,388],{},[43,381,383],{"href":382},"\u002Fpricing","Reeve Monitor"," бере на себе зовнішню половину в ті дні, коли вам не\nспадає на думку. Він щогодини проганяє всі дев’ять перевірок на щонайбільше\nтрьох застосунках, стежить, чи ваш застосунок узагалі відповідає, каже вам, коли\nрезультат ",[17,386,387],{},"змінюється",", замість чекати, поки ви зайдете подивитися, і надсилає\nзвіт наприкінці кожного місяця.",[22,390,392],{"id":391},"як-читати-зелений-результат","Як читати зелений результат",[10,394,395],{},"Чистий результат означає, що кожне питання, яке те сканування могло поставити,\nповернулося чистим того дня, коли ви його запустили. Це чогось варте, і це не\nвирок вашому застосунку.",[10,397,398],{},"Lovable кладе те саме застереження у власну документацію: інструменти допомагають\nвиявити поширені проблеми безпеки і не можуть гарантувати повну безпеку. Наше\nнесе його теж, бо автоматична зовнішня перевірка не є аудитом, а порожній\nперелік знахідок не є гарантією.",[10,400,401,402,405],{},"Єдине правило на випадок, коли ці двоє розходяться: ",[17,403,404],{},"якщо сканування зсередини\nчисте, а зовнішнє каже, що таблиця відповіла на запит без входу в акаунт, дійте\nза зовнішньою відповіддю."," Це відповідь, яку отримують ваші користувачі, і це\nвідповідь, яку отримує будь-хто інший. Ідіть і прочитайте політику на тій\nтаблиці.",[10,407,408,409,413,414,111],{},"Якщо ваш застосунок на Supabase, покроковий розбір простою мовою для цієї\nплатформи це\n",[43,410,412],{"href":411},"\u002Fis-your-lovable-app-safe","чи безпечний ваш застосунок Lovable",", а перевірки,\nзаписані як команди, які ви запустите самі, є в\n",[43,415,417],{"href":416},"\u002Fblog\u002Fsupabase-security-checker","перевірці безпеки Supabase",[22,419,421],{"id":420},"що-зробити-цього-тижня","Що зробити цього тижня",[423,424,425],"key-takeaways",{},[146,426,427,430,433,436,439,447],{},[149,428,429],{},"Читайте результат Quick scan під час публікації, замість проклацувати його, і сприймайте позначку Critical як те, що лагодять до виходу застосунку.",[149,431,432],{},"Запустіть Deep scan руками. Сам він не стартує, тож у проєкті, де його ніколи не запускали, код ніколи не читали.",[149,434,435],{},"Після публікації проскануйте живу адресу ззовні. Це єдина перевірка, яка робить запит, що його робить незнайомець.",[149,437,438],{},"Прочитайте політику на кожній таблиці, де лежать люди. Та, що пропускає всіх, лишає таблицю відкритою, поки панель вважає її захищеною.",[149,440,441,442,446],{},"Перевірте, що ключ у вашому застосунку публічний. ",[43,443,445],{"href":444},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Які ключі API безпечні у фронтенді"," показує, як відрізнити одні від одних.",[149,448,449],{},"Коли відповіді зсередини і ззовні розходяться, ваші користувачі отримують зовнішню.",[10,451,452,453,457],{},"Якщо ваш застосунок на Lovable використовує Supabase, відкрийте приватне вікно\nбраузера і пройдіться списком у розділах Authentication та Policies до п’ятниці.\n",[43,454,456],{"href":455},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Чи може будь-хто прочитати вашу базу Supabase","\nце той самий тест, записаний як команди, які можна вставити в термінал.",{"title":459,"searchDepth":460,"depth":460,"links":461},"",3,[462,464,465,466,467,468,469,470,471],{"id":24,"depth":463,"text":25},2,{"id":61,"depth":463,"text":62},{"id":89,"depth":463,"text":90},{"id":114,"depth":463,"text":115},{"id":137,"depth":463,"text":138},{"id":199,"depth":463,"text":200},{"id":337,"depth":463,"text":338},{"id":391,"depth":463,"text":392},{"id":420,"depth":463,"text":421},"Основи безпеки","\u002Fblog\u002Flovable-security-scan\u002Fcover-1200x630.png","Панель звіту зі стовпчиком галочок, а за нею база даних, що виходить за край кадру, і рядки, які з неї випливають.","Сканування безпеки Lovable: що перевіряють Quick scan і Deep scan, коли запускається кожне, і єдине, чого не доведе жодне сканування зсередини.",false,"md",[479,481,484,487,490],{"q":25,"a":480},"Так, і сканувань два. Quick scan запускається сам щоразу, коли ви публікуєте, і завершується за секунди, охоплюючи правила доступу вашої бази, ваші залежності npm і будь-який сервер MCP, який ваш застосунок віддає назовні без автентифікації. Deep scan читає весь код вашого застосунку, і запустити його треба самому з розділу Security у проєкті. Обидва безкоштовні, і обидва читають ваш проєкт, а не ваш опублікований застосунок.",{"q":482,"a":483},"Яка різниця між Quick scan і Deep scan?","Швидкість і глибина. Quick scan виконує фіксований набір перевірок за секунди, автоматично під час публікації, і охоплює налаштування бази, залежності та відкритість MCP. Deep scan містить усе з Quick scan, а потім читає код вашого застосунку в пошуках проблем, притаманних саме вашій логіці та вашим даним: контроль доступу, неавтентифіковані точки входу, ін’єкції, витік секретів, платежі, безпека акаунтів і відкриті персональні дані. Deep scan не запускається сам, поки ви працюєте, тож у проєкті, де його ніколи не запускали, код ніколи не читали.",{"q":485,"a":486},"Чи достатньо сканування безпеки Lovable?","Це справжня перевірка, і вона бачить те, чого не побачить жоден зовнішній інструмент: дерево ваших залежностей і таблицю, яку ваш фронтенд ніколи не називає. Чого вона не може, то це зробити запит, який роблять ваші відвідувачі. Політика може існувати, виглядати коректною і все одно повертати кожен рядок, і єдине, що це вирішує, це запитати ваш опублікований застосунок ззовні без входу в акаунт. Lovable пише те саме у власній документації: інструменти допомагають виявити поширені проблеми безпеки і не можуть гарантувати повну безпеку.",{"q":488,"a":489},"Чому зовнішній сканер знаходить те, що сканування Lovable пропустило?","Бо ці двоє читають різні речі. Сканування зсередини читає ваш проєкт: схему, політики, дерево залежностей, код. Сканування ззовні читає те, що опублікований застосунок віддає незнайомцю без входу в акаунт. Ззовні таблиця взагалі без захисту і таблиця з політикою, яка пропускає всіх, дають однакову відповідь, і це рядки. Саме цю відповідь справді отримують ваші користувачі й усі інші, тож коли ці двоє суперечать одне одному, діяти треба за нею.",{"q":491,"a":492},"Чи потрібні мені обидва?","Вони відповідають на різні питання, тож одне не замінює інше. Корисний порядок це порядок, у якому ці дві речі стаються: дайте Quick scan відпрацювати під час публікації, запустіть Deep scan перед тим, як щось справжнє піде в люди, і ще раз після того, як додасте вхід, платежі чи таблицю з людьми, а тоді проскануйте опубліковану адресу ззовні. Зовнішнє сканування триває близько 20 секунд і не потребує акаунта.","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",[495,496,497,498,499,500,501,502,503],"сканування безпеки lovable","lovable security scan","lovable deep scan","lovable quick scan","чи перевіряє lovable безпеку","lovable rls","перевірка lovable перед публікацією","аудит безпеки lovable","чи достатньо сканування lovable",{},true,"\u002Fblog\u002Flovable-security-scan","2026-09-24",{"title":5,"description":475},"blog\u002Flovable-security-scan",[511,512,513],"Сканування безпеки Lovable насправді є двома скануваннями, обидва безкоштовні: Quick scan запускається сам щоразу, коли ви публікуєте, а Deep scan ви запускаєте власноруч, і він читає весь код вашого застосунку.","Обидва читають ваш проєкт зсередини. Жодне з них не робить запит, який робить незнайомець, тож жодне не доведе, що віддає ваш опублікований застосунок.","Із 3 553 застосунків Lovable, чию базу Supabase ми змогли запитати ззовні, 2 017 відповіли на запит без входу в акаунт. Запускайте сканування зсередини перед публікацією, а зовнішнє після неї.","MkSm35DeccEY_yCmAMsBPZrWPdZTROOra4AT8HRepZo",[516,522,528,534,540,546,552,558,564,570,576,582,588,595,601,607,612,618,619,625,631,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,725,730,736,742,748,754,760,766,772,778,784,790,796,802,808,814,820,825,830,836,842,847,852,858],{"path":517,"title":518,"description":519,"published":520,"category":472,"image":521,"draft":476},"\u002Fblog\u002Fbase44-security-scan","Сканування безпеки Base44: те, що бачить лише воно","Сканування безпеки Base44 перевіряє сім видів проблем зсередини. Ось половина, яку читає тільки воно, і половина, на яку воно ніколи не дивиться.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":523,"title":524,"description":525,"published":526,"category":472,"image":527,"draft":476},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Ваш API-ключ витік. Порядок дій","API-ключ витік, і ви не знаєте, що робити першим. Не кожен ключ у вашому фронтенді є витоком, а порядок важить більше за швидкість.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":529,"title":530,"description":531,"published":532,"category":472,"image":533,"draft":476},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" без вимкнення RLS","\"Infinite recursion detected in policy for relation\" означає, що ваша policy запитала таблицю, яку вона захищає. Ось як розірвати коло.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":535,"title":536,"description":537,"published":538,"category":472,"image":539,"draft":476},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" у Supabase, і хибне виправлення","\"No API key found in request\" означає, що запит дійшов до Supabase без ключа. Більшість відповідей натомість вказують на правила вашої бази.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":541,"title":542,"description":543,"published":544,"category":472,"image":545,"draft":476},"\u002Fblog\u002Fis-base44-safe","Чи безпечний Base44? Дані 5 442 застосунків","Чи безпечний Base44? Ми прогнали дев’ять перевірок на 5 442 робочих застосунках Base44. Майже всі отримали B з причин, яких власник ніколи не обирав.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":547,"title":548,"description":549,"published":550,"category":472,"image":551,"draft":476},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Сховати ключ API: перенесіть його в Supabase Edge Function","Сховати ключ API означає прибрати його з браузера, а Supabase Edge Function це найменше місце, куди його покласти. Два кроки поруч важать більше.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":553,"title":554,"description":555,"published":556,"category":472,"image":557,"draft":476},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Чи відкритий ваш файл .env? Дванадцять шляхів для перевірки","Чи відкритий ваш файл .env на вашому власному вебсервері? Дванадцять адрес скажуть це за хвилину, а влучання означає, що все в ньому вже публічне.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":559,"title":560,"description":561,"published":562,"category":472,"image":563,"draft":476},"\u002Fblog\u002Fis-v0-safe","Безпека v0: усі 1 790 просканованих застосунків v0 отримали A","Безпека v0 на 1 790 живих застосунках v0: усі отримали A. Лише 17 згадували базу даних, і саме це здебільшого вимірює оцінка A.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":565,"title":566,"description":567,"published":568,"category":472,"image":569,"draft":476},"\u002Fblog\u002Fis-bolt-safe","Чи безпечний Bolt? Що показали 1 123 застосунки Bolt","Чи безпечний Bolt? Ми прогнали 1 123 живі застосунки Bolt через дев’ять перевірок. Хостинг був чистим. Знахідки: ключі й відкриті таблиці в самих застосунках.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":571,"title":572,"description":573,"published":574,"category":472,"image":575,"draft":476},"\u002Fblog\u002Fis-supabase-down-or-your-app","Supabase не працює чи проблема у вашому застосунку? Як розрізнити","Supabase не працює чи зламався ваш застосунок? Пауза, повна база й ваша власна помилка виглядають однаково. Чотири перевірки їх розрізняють.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":577,"title":578,"description":579,"published":580,"category":472,"image":581,"draft":476},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","Чи шифрує Supabase мої дані? Так. Ось від чого це захищає","Чи шифрує Supabase дані? Так: AES-256 у стані спокою, TLS під час передавання, SOC 2 та ISO 27001. Що покриває кожне і який витік не зупиняє жодне.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":583,"title":584,"description":585,"published":586,"category":472,"image":587,"draft":476},"\u002Fblog\u002Fsupabase-free-plan-limits","Ліміти безкоштовного тарифу Supabase і що стається на кожному","Ліміти безкоштовного тарифу Supabase: 500 МБ бази, 5 ГБ egress і жодних резервних копій. Що стається на кожній межі і що змінює Pro за $25.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":589,"title":590,"description":591,"published":592,"category":593,"image":594,"draft":476},"\u002Fblog\u002Ftest-your-supabase-backup","Перевірте резервну копію Supabase до того, як вона знадобиться","Як перевірити резервну копію Supabase: відновити в тестовий проєкт, порахувати рядки, увійти й знайти рядок, якого бракує обрізаному файлу.","2026-09-28","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":596,"title":597,"description":598,"published":599,"category":593,"image":600,"draft":476},"\u002Fblog\u002Fsupabase-backup-github-action","Безкоштовна резервна копія Supabase через GitHub Action і підступ","Резервна копія Supabase через GitHub Action безкоштовна й годиться багатьом застосункам. Робочий процес, потрібний рядок підключення та egress.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":602,"title":603,"description":604,"published":605,"category":593,"image":606,"draft":476},"\u002Fblog\u002Fdownload-your-supabase-backup","Чому ви не можете завантажити резервну копію Supabase","Завантажити резервну копію Supabase на сучасному проєкті не вийде: щоденна копія там фізична. Як це перевірити і як тримати власну копію.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":608,"title":609,"description":610,"published":605,"category":472,"image":611,"draft":476},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": бракує GRANT","З 30 жовтня нова таблиця в Supabase відповідає \"permission denied for table\", доки ви не дасте доступ. Лист показує лише половину виправлення.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":613,"title":614,"description":615,"published":616,"category":472,"image":617,"draft":476},"\u002Fblog\u002Fopen-api-endpoint-exposed","Чи є відкритий API-ендпоінт проблемою безпеки? Читайте JSON","Ваше сканування позначило відкритий API-ендпоінт. Чи це важливо, залежить від того, що повернулося, і більшість знайдених належали платформі.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":506,"title":5,"description":475,"published":507,"category":472,"image":493,"draft":476},{"path":620,"title":621,"description":622,"published":623,"category":593,"image":624,"draft":476},"\u002Fblog\u002Fsupabase-backup-auth-users","Чому у вашому дампі Supabase немає користувачів","Запустіть supabase db dump окремо і отримаєте форму вашої бази та жодного її рядка, без схеми auth, у якій живуть ваші користувачі.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":626,"title":627,"description":628,"published":629,"category":472,"image":630,"draft":476},"\u002Fblog\u002Fdomain-and-certificate-expiry","Домен закінчився, сайт лежить: що буде далі","Ваш домен закінчився і сайт лежить. Ось який годинник уже пішов, чому прострочений сертифікат це менша з двох бід, і як перевірити обидва.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":133,"title":632,"description":633,"published":634,"category":472,"image":635,"draft":476},"Чи безпечний Lovable? Що показали 18 554 застосунки Lovable","Чи безпечний Lovable? Ми прогнали 18 554 живі застосунки Lovable через дев’ять перевірок. Платформа виявилася найчистішою з п’яти. Знахідки були в застосунках.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":637,"title":638,"description":639,"published":640,"category":472,"image":641,"draft":476},"\u002Fblog\u002Fvibe-coded-app-security-checklist","Чек-лист безпеки для vibe coding, у девʼяти перевірках","Чек-лист безпеки для vibe coding із девʼяти пунктів, кожен з яких будь-хто може перевірити у вашому живому застосунку ззовні, і кожен має тест на один рядок.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":643,"title":644,"description":645,"published":646,"category":472,"image":647,"draft":476},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Секретний ключ Stripe у фронтенді може рухати гроші","Секретний ключ Stripe, відкритий у вашому фронтенді, може повертати кошти, списувати й читати кожну картку клієнта. А ключ pk_live_ там і має бути.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":649,"title":650,"description":651,"published":652,"category":472,"image":653,"draft":476},"\u002Fblog\u002Fvite-and-next-public-env-vars","Змінні оточення Vite відкриті: префікс означає опублікувати це","Змінні оточення Vite відкриті у вашому застосунку, бо так просив префікс. VITE_ і NEXT_PUBLIC_ означають опублікувати це, а ШІ, який їх додав, не знав ціни.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":655,"title":656,"description":657,"published":658,"category":472,"image":659,"draft":476},"\u002Fblog\u002Fbase44-source-maps","Безпека Base44: що позначає скан і що з цього виправляти вам","Безпека Base44 на 5 438 просканованих застосунках: три знахідки майже на кожному належать платформі, source map є бейджем Base44, а ваша частина коротка.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":661,"title":662,"description":663,"published":664,"category":472,"image":665,"draft":476},"\u002Fblog\u002Fis-cursor-ai-safe","Чи безпечний Cursor AI? Редактор, код і опублікований застосунок","Чи безпечний Cursor AI? Три запитання в одному пошуку: що Cursor зберігає, у чому помиляється його код і чи відкритий застосунок, який ви опублікували.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":667,"title":668,"description":669,"published":670,"category":472,"image":671,"draft":476},"\u002Fblog\u002Fis-replit-safe","Чи безпечний Replit? Що ми знайшли в 3 042 живих застосунках Replit","Чи безпечний Replit? Ми прогнали 3 042 живі застосунки Replit через дев’ять зовнішніх перевірок. Знахідки були в опублікованому застосунку, а не в хостингу.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":673,"title":674,"description":675,"published":676,"category":593,"image":677,"draft":476},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: у копії бази даних немає жодного файлу","Supabase storage backup це окрема робота. Копії бази даних зберігають список ваших файлів і жодного з них, тож після відновлення кожне завантаження зламане.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":679,"title":680,"description":681,"published":682,"category":593,"image":683,"draft":476},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery у Supabase: ціна та межі","Point-in-time recovery у Supabase відмотує базу на будь-яку секунду за останній тиждень. Коштує $100 на місяць понад Pro і покриває лише базу даних.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":685,"title":686,"description":687,"published":688,"category":593,"image":689,"draft":476},"\u002Fblog\u002Fsupabase-project-paused-recover","Проєкт Supabase на паузі? Ваші дані нікуди не зникли","Supabase поставив ваш проєкт на паузу після тижня без активності. Нічого не видалено, кнопка Restore стоїть поруч із назвою, і у вас є рік, щоб натиснути.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":691,"title":692,"description":693,"published":694,"category":472,"image":695,"draft":476},"\u002Fblog\u002Fsafest-ai-app-builder","Який білдер застосунків з ШІ найбезпечніший? 30 998 тестів","Який білдер застосунків з ШІ найбезпечніший? Ми просканували 30 998 живих застосунків з Lovable, Base44, Replit, v0 і Bolt. Оцінку вирішує не білдер.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":697,"title":698,"description":699,"published":700,"category":472,"image":701,"draft":476},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Увімкніть Row Level Security на кожній таблиці Supabase і перевірте","Row Level Security у Supabase без політики закриває таблицю повністю. Політика без увімкненого перемикача не робить нічого. Ось SQL, і ось перевірка.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":703,"title":704,"description":705,"published":706,"category":472,"image":707,"draft":476},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": чого не бачить попередження","Supabase позначає \"RLS disabled in public\" як помилку. Про політику читання, яка лишає вашу таблицю так само відкритою, він не каже нічого.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":709,"title":710,"description":711,"published":712,"category":472,"image":713,"draft":476},"\u002Fblog\u002Frotate-supabase-service-role-key","Як замінити злитий ключ service_role у Supabase","Supabase каже спершу закрити витік. Інші посібники кажуть міняти негайно. Що правильно, залежить від того, куди саме потрапив ваш ключ service_role.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":715,"title":716,"description":717,"published":718,"category":472,"image":719,"draft":476},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Сканери безпеки для vibe coding у порівнянні, наш теж","Найкращий сканер безпеки для vibe coding залежить від трьох питань, на які не відповідає жоден перелік функцій. Десять інструментів і ціни.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":416,"title":721,"description":722,"published":723,"category":472,"image":724,"draft":476},"Supabase security checker: п’ять перевірок, які зробите самі","Supabase security checker читає ваш опублікований застосунок, а не налаштування проєкту. Ось п’ять перевірок і як виконати кожну самостійно.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":333,"title":726,"description":727,"published":728,"category":472,"image":729,"draft":476},"Сканер безпеки для vibe coding: чого не бачить скан URL","Сканер безпеки для vibe coding читає ваш робочий застосунок ззовні. Що це охоплює, чотири речі, яких він не бачить, і як читати результат.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":731,"title":732,"description":733,"published":734,"category":472,"image":735,"draft":476},"\u002Fblog\u002Fmissing-security-headers","Відсутні заголовки безпеки: коли це справді важливо","Відсутні заголовки безпеки трапляються в наших звітах найчастіше. Від чого вони захищають і коли це найменш терміновий рядок вашого звіту.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":737,"title":738,"description":739,"published":740,"category":472,"image":741,"draft":476},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Ваш ключ API OpenAI відкритий у фронтенді. Замініть його.","Ключ API OpenAI, відкритий у фронтенді, не можна прив'язати до домену. Замініть його сьогодні, перенесіть виклик на свій сервер і обмежте витрати.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":743,"title":744,"description":745,"published":746,"category":472,"image":747,"draft":476},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Ключ API у фронтенді: що насправді віддають 30 998 застосунків","Ключ API, відкритий у вашому фронтенді, зазвичай є ключем Google Maps. Ми просканували 30 998 vibe-coded застосунків і порахували, що витікає насправді.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":749,"title":750,"description":751,"published":752,"category":593,"image":753,"draft":476},"\u002Fblog\u002Fsupabase-backup-tools-compared","Інструменти резервного копіювання Supabase, і наш серед них","Чотири види інструментів резервного копіювання Supabase, що копіює кожен і коли безкоштовна GitHub Action виграє в будь-якої оплати, нашої теж.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":755,"title":756,"description":757,"published":758,"category":472,"image":759,"draft":476},"\u002Fblog\u002Freplit-secrets-explained","Як користуватися секретами в Replit і що все одно публікується","Як користуватися секретами в Replit: додати, прочитати і усунути дві причини undefined. А ще ключі, які цей інструмент не здатен зберегти в таємниці.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":761,"title":762,"description":763,"published":764,"category":593,"image":765,"draft":476},"\u002Fblog\u002Fback-up-supabase-free-tier","Резервні копії на безкоштовному тарифі Supabase без терміналу","На безкоштовному тарифі Supabase резервних копій немає: копію робите ви. Як зробити її з панелі та що втрачає шлях через CSV.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":767,"title":768,"description":769,"published":770,"category":472,"image":771,"draft":476},"\u002Fblog\u002Fis-supabase-secure","Чи безпечний Supabase? Так. Ваш проєкт це інше питання","Чи безпечний Supabase? Платформа проходить аудити, шифрує дані й тримає пентести. Їхня документація каже, де це закінчується і починаються ваші налаштування.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":773,"title":774,"description":775,"published":776,"category":472,"image":777,"draft":476},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Де знайти API-ключі Supabase: anon, service_role і URL","URL проєкту, ключ anon і ключ service_role лежать на одній сторінці панелі. Ось де вона, і яке з чотирьох значень має бути у вашому застосунку.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":779,"title":780,"description":781,"published":782,"category":472,"image":783,"draft":476},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy в Supabase. Що далі?","\"New row violates row-level security policy\" означає, що Supabase відмовив у записі. Швидке виправлення знову відкриває таблицю для всіх.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":785,"title":786,"description":787,"published":788,"category":472,"image":789,"draft":476},"\u002Fblog\u002Fcors-wildcard-security-risk","Чи є вайлдкард CORS ризиком для безпеки? Майже ніколи.","Чи є вайлдкард CORS ризиком для безпеки? Зазвичай це типове налаштування вашого білдера, і воно не видає нічого, що ваш сервер і так віддавав кожному.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":791,"title":792,"description":793,"published":794,"category":593,"image":795,"draft":476},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Branching у Supabase це не бекап. Він іде тільки вперед.","Чому branching у Supabase це не бекап: гілка стартує без ваших даних, а мердж переносить саму лише схему. Для чого він потрібен і що брати замість нього.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":797,"title":798,"description":799,"published":800,"category":593,"image":801,"draft":476},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Як відновити резервну копію Supabase, і що ламається потім","Як відновити резервну копію Supabase з панелі або з файлу дампа, що саме замінює відновлення і чому ваш застосунок може лишитися зламаним після нього.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":803,"title":804,"description":805,"published":806,"category":472,"image":807,"draft":476},"\u002Fblog\u002Fsupabase-storage-bucket-public","Ваш бакет Supabase Storage публічний. Чи це проблема?","Публічний бакет Supabase Storage означає, що той, хто має URL файлу, може його відкрити. Він не означає, що хтось може переглянути список вмісту.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":809,"title":810,"description":811,"published":812,"category":472,"image":813,"draft":476},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Чи є проблемою ключ API Google у вашому браузері?","Ключ API Google у відкритому коді сторінки наш сканер знаходить найчастіше, і зазвичай усе гаразд. Вирішує це одне безкоштовне налаштування.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":815,"title":816,"description":817,"published":818,"category":593,"image":819,"draft":476},"\u002Fblog\u002Fai-agent-deleted-my-database","ШІ-агент видалив мої дані в Supabase. Що можна відновити?","ШІ-агент видалив дані з вашої бази. Те, що ви зможете відновити, вирішилося раніше, а наступні хвилини вирішують, скільки з цього вціліє.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":455,"title":821,"description":822,"published":823,"category":472,"image":824,"draft":476},"Чи може будь-хто прочитати вашу базу Supabase? 3 680 застосунків","Чи може будь-хто прочитати вашу базу даних Supabase без входу? Ми просканували 30 998 живих застосунків, зроблених ШІ-білдерами, і виміряли, як часто так.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":826,"title":827,"description":828,"published":823,"category":472,"image":829,"draft":476},"\u002Fblog\u002Fsource-maps-exposed-in-production","Відкриті source maps: ваш застосунок публікує свій вихідний код","Відкрита source map дає будь-кому прочитати оригінальний код вашого застосунку, разом із коментарями. Перевірка за 30 секунд, і що важить насправді.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":831,"title":832,"description":833,"published":834,"category":472,"image":835,"draft":476},"\u002Fblog\u002Fsupabase-new-api-keys","Нові API-ключі Supabase: який із них безпечний у застосунку?","Supabase замінив anon і service_role публічними та секретними ключами. Який із них має бути у вашому застосунку, а який не має бути ніколи?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":837,"title":838,"description":839,"published":840,"category":593,"image":841,"draft":476},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Чи робить Supabase резервні копії моєї бази? Залежить від тарифу.","Чи робить Supabase резервні копії вашої бази даних? На платних тарифах щодня, на безкоштовному жодної. Як дізнатися, що у вас насправді є.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":109,"title":843,"description":844,"published":845,"category":472,"image":846,"draft":476},"Supabase Row Level Security увімкнено. Таблиця досі публічна.","Увімкнути Supabase Row Level Security не означає захистити таблицю. Захищають політики, а та, що полагодила застосунок, часто впускає всіх.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":848,"title":849,"description":850,"published":845,"category":593,"image":851,"draft":476},"\u002Fblog\u002Fversion-history-is-not-a-backup","Історія версій не є резервною копією. Вона не поверне таблицю.","Lovable і Bolt ведуть історію версій вашого коду. Ваша база даних працює як окремий сервіс, тож відкат назад не поверне ваші дані.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":853,"title":854,"description":855,"published":856,"category":593,"image":857,"draft":476},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Три способи зробити резервну копію бази Supabase, і чого бракує","Панель, pg_dump і керований сервіс. Що насправді зберігає кожен спосіб, що тихо лишає осторонь і який із них переживе втрату акаунта.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":444,"title":859,"description":860,"published":856,"category":472,"image":861,"draft":476},"Які API-ключі безпечні у браузері, а які ні","Ваш ключ anon у Supabase створений, щоб бути публічним. Ключ service_role для цього не створений, і він ігнорує всі правила, які ви задали. Як їх розрізнити.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791618974046]