[{"data":1,"prerenderedAt":775},["ShallowReactive",2],{"blog-uk-safest-ai-app-builder":3,"blog-index-uk":535},{"id":4,"title":5,"body":6,"category":494,"cover":495,"coverAlt":496,"description":497,"draft":498,"extension":499,"faq":500,"image":516,"keywords":517,"meta":523,"navigation":524,"ogTitle":28,"path":525,"published":526,"seo":527,"stem":528,"tldr":529,"updated":533,"__hash__":534},"blog_uk\u002Fblog\u002Fsafest-ai-app-builder.md","Який білдер застосунків з ШІ найбезпечніший? 30 998 тестів",{"type":7,"value":8,"toc":482},"minimark",[9,13,16,24,29,32,35,38,42,45,58,61,65,68,71,79,83,86,237,250,258,261,282,289,293,296,299,302,308,316,324,328,331,334,423,428,431,441,445,467,474],[10,11,12],"p",{},"Ви обрали білдер ще до того, як щось знали про будь-який із них. Можливо, якась\nгілка радила один, можливо, вам сподобалося демо, можливо, це був той, яким\nкористувався ваш друг. І десь відтоді ви побачили, як хтось заявляє, що саме\nваш і є небезпечний, і задумалися, чи не був найбезпечніший білдер застосунків\nз ШІ одним з інших від самого початку.",[10,14,15],{},"Тож ми це виміряли. У серпні 2026 року ми просканували 30 998 живих\nзастосунків, опублікованих із Lovable, Base44, Replit, v0 і Bolt, і прогнали ті\nсамі дев’ять зовнішніх перевірок на кожному з них.",[10,17,18,19,23],{},"Ось що порівняння роблять неправильно: ",[20,21,22],"strong",{},"білдер, який ви обрали, майже ніколи не\nє тим, що вирішує, чи відкритий ваш застосунок."," Усі п’ять повернулися з\nпоказником від 99 % до 100 % щонайменше з одним зауваженням. Справжні\nвідмінності між ними великі, і це відмінності в налаштуваннях за замовчуванням,\nа не в безпеці.",[25,26,28],"h2",{"id":27},"який-білдер-застосунків-з-ші-найбезпечніший","Який білдер застосунків з ШІ найбезпечніший?",[10,30,31],{},"Жоден, і того рейтингу, який ви шукаєте, не існує.",[10,33,34],{},"Кожен білдер у цьому скануванні дав застосунки із зауваженнями, приблизно з\nоднаковою частотою, бо найпоширеніше зауваження ставить хостинг, а не людина,\nяка будувала застосунок. Під цим заголовком білдери розходяться дуже помітно,\nале розходяться в таких речах, як те, чи публікується ваш вихідний код поряд із\nвашим застосунком, а не в тому, чи може незнайомець прочитати ваших\nкористувачів.",[10,36,37],{},"Те, що відділяє A від D, ви зробили вже після того, як обрали білдер. Зазвичай\nце одне рішення: ви підключили базу даних.",[25,39,41],{"id":40},"що-саме-ми-міряли","Що саме ми міряли",[10,43,44],{},"Ті самі дев’ять перевірок, які прогнали б на вашому застосунку, прочитані\nззовні, без входу й без доступу до будь-якого облікового запису.",[10,46,47,48,51,52,57],{},"Ми сканували кожен застосунок між 12 і 14 серпня 2026 року, і 30 998 з них дали\nрезультат, який ми змогли класифікувати. Кожен відсоток нижче це частка від\nзастосунків, на яких ця перевірка справді ",[20,49,50],{},"відповіла",", а ніколи не частка від\nусього, що ми просканували. Перевірка, яка не змогла завершитися, записується як\nневідома, а не як пройдена, і саме тому знаменники в таблицях рухаються. Повна\nметодика й дані під нею є ",[53,54,56],"a",{"href":55},"\u002Fresearch\u002Fvibe-coded-app-security-2026","у звіті",".",[10,59,60],{},"Двох речей ми не робили. Ми нікуди не входили й не читали нічиїх рядків: там, де\nтаблиця відповідала, ми питали базу, скільки рядків вона віддала б, і на цьому\nспинялися. Жоден застосунок не названо ні тут, ні деінде в тому, що ми\nпублікуємо.",[25,62,64],{"id":63},"кожен-білдер-на-рівні-99-і-це-число-каже-менше-ніж-здається","Кожен білдер на рівні 99 %, і це число каже менше, ніж здається",[10,66,67],{},"Бо майже все це одне зауваження, і це зауваження належить платформі.",[10,69,70],{},"Відсутні заголовки безпеки трапилися на 18 539 з 18 554 застосунків Lovable, на\nвсіх 5 438 застосунках Base44, на 1 790 з 1 790 застосунків v0, на 1 121 з 1 123\nзастосунків Bolt і на 2 924 з 3 042 застосунків Replit. Заголовки надсилає те,\nщо віддає ваш застосунок, тож на домені білдера вони є властивістю цього домену\nй однакові для кожного застосунку на ньому.",[10,72,73,74,78],{},"Це справжнє зауваження, і його варто закрити, коли ви перейдете на власний\nдомен. Але це ",[53,75,77],{"href":76},"\u002Fblog\u002Fmissing-security-headers","найменш терміновий рядок звіту",",\nі це більша частина того, що рахує фраза \"99 % застосунків мають проблему\".",[25,80,82],{"id":81},"справжня-різниця-між-білдерами-це-налаштування-за-замовчуванням","Справжня різниця між білдерами це налаштування за замовчуванням",[10,84,85],{},"Кожен білдер віддає інший набір налаштувань за замовчуванням, і вони з’являються\nмайже в кожному застосунку, який він робить.",[87,88,89,118],"table",{},[90,91,92],"thead",{},[93,94,95,99,103,106,109,112,115],"tr",{},[96,97,98],"th",{},"Білдер",[96,100,102],{"align":101},"right","Просканованих застосунків",[96,104,105],{"align":101},"Хоч одне зауваження",[96,107,108],{"align":101},"Опублікований вихідний код",[96,110,111],{"align":101},"Зауваження cross-origin",[96,113,114],{"align":101},"Опублікований секретний ключ",[96,116,117],{"align":101},"Оцінка D або F",[119,120,121,145,172,194,215],"tbody",{},[93,122,123,127,130,133,136,139,142],{},[124,125,126],"td",{},"Lovable",[124,128,129],{"align":101},"18 554",[124,131,132],{"align":101},"99 %",[124,134,135],{"align":101},"225 з 18 553",[124,137,138],{"align":101},"8 з 18 518",[124,140,141],{"align":101},"822 (4 %)",[124,143,144],{"align":101},"407",[93,146,147,150,153,156,161,166,169],{},[124,148,149],{},"Base44",[124,151,152],{"align":101},"5 438",[124,154,155],{"align":101},"100 %",[124,157,158],{"align":101},[20,159,160],{},"3 229 з 5 434 (59 %)",[124,162,163],{"align":101},[20,164,165],{},"5 418 з 5 419 (99 %)",[124,167,168],{"align":101},"103 (2 %)",[124,170,171],{"align":101},"2",[93,173,174,177,180,182,185,188,191],{},[124,175,176],{},"Replit",[124,178,179],{"align":101},"3 042",[124,181,132],{"align":101},[124,183,184],{"align":101},"168 з 3 041 (6 %)",[124,186,187],{"align":101},"1 129 з 3 037 (37 %)",[124,189,190],{"align":101},"219 (7 %)",[124,192,193],{"align":101},"9",[93,195,196,199,202,204,207,210,213],{},[124,197,198],{},"v0",[124,200,201],{"align":101},"1 790",[124,203,155],{"align":101},[124,205,206],{"align":101},"0 з 1 790",[124,208,209],{"align":101},"0 з 1 786",[124,211,212],{"align":101},"0",[124,214,212],{"align":101},[93,216,217,220,223,225,228,231,234],{},[124,218,219],{},"Bolt",[124,221,222],{"align":101},"1 123",[124,224,155],{"align":101},[124,226,227],{"align":101},"13 з 1 123",[124,229,230],{"align":101},"5 з 1 120",[124,232,233],{"align":101},"75 (7 %)",[124,235,236],{"align":101},"15",[10,238,239,240,244,245,249],{},"Стовпець із source maps треба читати уважно, бо на Base44 він міряє не те саме,\nщо на решті чотирьох. У вересні ми знову відкрили 30 позначених застосунків\nBase44: у 27 єдиною картою, яка відповідала, була ",[241,242,243],"code",{},"\u002Fstatic\u002Fjs\u002Fbadge.js.map",",\nкарта скрипта значка Base44, і в жодному з 30 карта не покривала файли власника.\nТож ці 59 % це платформа, яка публікує власний файл на кожному застосунку, що\nйого хостить, а не 3 229 власників, які втрачають свій код. На Lovable, Replit і\nBolt той самий стовпець справді означає код власника, і саме тому 1 %, 6 % і 59 %\nне читаються згори вниз як рейтинг.\n",[53,246,248],{"href":247},"\u002Fblog\u002Fbase44-source-maps","Що ми знайшли всередині тих карт Base44"," це повна\nрозповідь.",[10,251,252,253,257],{},"Стовпець із 99 % справжній, і він теж робота самого Base44: платформа\nвстановлює CORS для кожного застосунку, який хостить, і не дає налаштування на\nрівні застосунку. Опублікований вихідний код означає, там де він ваш, що\nоригінальні файли за вашим застосунком можна прочитати з інструментів розробника\nв браузері. ",[53,254,256],{"href":255},"\u002Fblog\u002Fsource-maps-exposed-in-production","Що це відкриває, а що ні",",\nварто прочитати, якщо ви на одній із решти чотирьох.",[10,259,260],{},"Стовпець секретних ключів це той, від якого всі чекають, що він домінуватиме, і\nвін не домінує. Ключ, вартий згадки, трапився в 4 % до 7 % застосунків на трьох\nіз п’яти білдерів і в жодному із застосунків v0.",[10,262,263,264,267,268,271,272,267,275,278,279,57],{},"Якщо хочете версію простою мовою для білдера, яким ви справді користуєтесь, у\nкожного є своя сторінка: ",[53,265,126],{"href":266},"\u002Fis-your-lovable-app-safe",",\n",[53,269,149],{"href":270},"\u002Fis-your-base44-app-safe",", ",[53,273,176],{"href":274},"\u002Fis-your-replit-app-safe",[53,276,198],{"href":277},"\u002Fis-your-v0-app-safe"," та ",[53,280,219],{"href":281},"\u002Fis-your-bolt-app-safe",[10,283,284,285,57],{},"Або пропустіть читання: наше безплатне сканування прогонить ці самі перевірки на\nвашому живому сайті й скаже, на яких із них ваш застосунок спотикається. Близько\n20 секунд, без облікового запису: ",[53,286,288],{"href":287},"\u002F#scan","перевірте свій застосунок",[25,290,292],{"id":291},"що-насправді-вирішує-d-або-f","Що насправді вирішує D або F",[10,294,295],{},"База даних і те, що ви з нею зробили.",[10,297,298],{},"Lovable дав 407 застосунків з оцінкою D або F із 18 554. v0 не дав жодного з\n1 790. Це схоже на вирок двом білдерам, доки ви не подивитеся, чим є ці\nзастосунки: 35 % застосунків Lovable називають проєкт бази даних, проти\nприблизно 1 % застосунків v0.",[10,300,301],{},"Перевірки, які можуть дати D або F, майже всі є перевірками бази даних. У\nзастосунку без бази менше того, що може піти не так, і менше того, на що нам\nдивитися. Тож рядок Lovable міряє не гірший білдер, він міряє білдер, чиї\nкористувачі підключають бази даних, а це і є головна причина, чому його\nобирають.",[303,304],"diagram",{"alt":305,"caption":306,"src":307},"Два застосунки намальовані поруч як однакові панелі. У лівій один порожній блок із трьома зеленими галочками під ним і літерою A у верхньому кутку. У правій той самий блок і ті самі три галочки, а вниз від нього йде пунктирна лінія до червоного циліндра бази даних і червоного хрестика, і літера D у верхньому кутку.","Зовнішні перевірки виходять однаковими в обох. Усе, що може дати серйозну оцінку, живе в тій частині, яку ви підключили самі.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fwhere-a-grade-comes-from-1600x700.png",[10,309,310,311,315],{},"З 3 553 застосунків Lovable, чия база нам відповіла, 2 017 мали щонайменше одну\nтаблицю, яку незнайомець міг прочитати без входу. Це\n",[53,312,314],{"href":313},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","зауваження, яке варто виправити першим",",\nі воно не має нічого спільного з тим, який білдер згенерував ваш інтерфейс.",[10,317,318,319,323],{},"Саме на Lovable ця цифра достатньо велика, щоб мати власну статтю: ",[53,320,322],{"href":321},"\u002Fblog\u002Fis-lovable-safe","що\nпоказали 18 554 застосунки Lovable"," проводить ті самі\nдев’ять перевірок через найбільшу когорту, яку ми маємо.",[25,325,327],{"id":326},"чому-ми-не-будемо-їх-ранжувати","Чому ми не будемо їх ранжувати",[10,329,330],{},"Бо для трьох із п’яти ми не змогли перевірити достатньо баз даних, щоб сказати\nхоч щось.",[10,332,333],{},"Ось та частина даних, яку кожен рейтинг лишає за кадром:",[87,335,336,351],{},[90,337,338],{},[93,339,340,342,345,348],{},[96,341,98],{},[96,343,344],{"align":101},"Називає проєкт бази",[96,346,347],{"align":101},"Баз, які нам відповіли",[96,349,350],{},"Мав відкриту на читання таблицю",[119,352,353,366,380,395,410],{},[93,354,355,357,360,363],{},[124,356,126],{},[124,358,359],{"align":101},"35 %",[124,361,362],{"align":101},"3 553",[124,364,365],{},"2 017, або 57 %",[93,367,368,370,373,377],{},[124,369,149],{},[124,371,372],{"align":101},"27 %",[124,374,375],{"align":101},[20,376,171],{},[124,378,379],{},"2 з 2, до яких ми дісталися",[93,381,382,384,387,392],{},[124,383,219],{},[124,385,386],{"align":101},"24 %",[124,388,389],{"align":101},[20,390,391],{},"35",[124,393,394],{},"27 з 35, до яких ми дісталися",[93,396,397,399,402,407],{},[124,398,176],{},[124,400,401],{"align":101},"1 %",[124,403,404],{"align":101},[20,405,406],{},"5",[124,408,409],{},"4 з 5, до яких ми дісталися",[93,411,412,414,416,420],{},[124,413,198],{},[124,415,401],{"align":101},[124,417,418],{"align":101},[20,419,212],{},[124,421,422],{},"нічого перевіряти",[303,424],{"alt":425,"caption":426,"src":427},"П’ять рядків, кожен починається з логотипа білдера й кількості його застосунків, які ми просканували. Кожен рядок малює ці застосунки як бліду смугу, всередині якої суцільним залиті бази, що нам відповіли. Суцільна частина Lovable це широкий блок із написом 3 553; у Base44, Replit і Bolt це волосини з написами 2, 5 і 35, а у v0 це порожнє пунктирне коло з написом 0.","Суцільна частина кожної смуги це те, що ми справді змогли перевірити. Чотири з п’яти надто тонкі, щоб нести відсоток.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fwhat-we-could-check-1600x620.png",[10,429,430],{},"Подивіться на рядок Base44. Понад чверть його застосунків називають проєкт бази\nданих, і рівно дві з тих баз нам колись відповіли. Ми не збираємося\nперетворювати два застосунки на показник і ставити його поряд із числом,\nпобудованим на 3 553. І ніхто інший, хто сканував ззовні, теж не може, хай що\nкаже його порівняльна таблиця.",[432,433,435],"callout",{"type":434},"warn",[10,436,437,440],{},[20,438,439],{},"Перевірка, яка не змогла завершитися, це не пройдена перевірка."," Це правило\nвирішує більшість того, що вище, і саме воно тихо зникає, щойно сканування\nперетворюють на рейтинг. Застосунок, до якого ми не дісталися, невідомий. База,\nяка ніколи не відповіла, невідома. Порахувати будь-яку з них чистою дає\nохайніший графік і хибний, і це найгірше, що звіт про безпеку може зробити з\nлюдиною, яка після нього перестає хвилюватися.",[25,442,444],{"id":443},"що-перевірити-у-власному-застосунку","Що перевірити у власному застосунку",[446,447,448],"key-takeaways",{},[449,450,451,455,458,461,464],"ul",{},[452,453,454],"li",{},"Перестаньте шукати безпечніший білдер. Ніщо в цих даних не підтримує перенесення, а перенесення перебудовує весь ваш застосунок заради рядка, за який вам ніколи не ставили оцінку.",[452,456,457],{},"Почніть зі своїх таблиць бази даних, хоч яким білдером ви користувалися. Таблиця, яку може прочитати незнайомець, це зауваження, що спустошує застосунок, і це єдине тут, що можете виправити тільки ви.",[452,459,460],{},"З’ясуйте, чи публікує ваш білдер ваш вихідний код, і вимкніть це, якщо публікує. Це одне налаштування, і на одній із п’яти платформ вище воно ввімкнене з коробки для трьох застосунків із п’яти.",[452,462,463],{},"Ставтеся до зауваження про заголовки як до прибирання. Воно справжнє, стосується майже кожного застосунку на домені білдера, і це не те, що хтось використає проти вас.",[452,465,466],{},"Перевірте будь-який ключ у вашому опублікованому коді, перш ніж хвилюватися про решту цієї сторінки, бо це єдине зауваження, яке вже коштує грошей, доки ви читаєте.",[10,468,469,470,57],{},"Усе це можна перевірити руками. Тримати відповідь правдивою наступного місяця це\nта частина, яка не лишається зробленою, і саме для цього існує Reeve Care: він\nпрогонить ці самі перевірки за розкладом і скаже, коли відповідь погіршиться, а\nще тримає перевірені копії вашої бази поза обліковим записом вашого\nпостачальника, щоб було що повернути. Ця друга половина важлива тут, бо ми\nзавжди перевіряємо лише читання, а те саме дозвільне правило, яке дозволяє\nнезнайомцю прочитати таблицю, зазвичай дозволяє йому й писати в неї.\n",[53,471,473],{"href":472},"\u002Fpricing","Що він наглядає і скільки коштує",[10,475,476,477,481],{},"Якщо вам зручніше йти за списком, ",[53,478,480],{"href":479},"\u002Fchecklist","10-хвилинний чекліст безпеки","\nохоплює весь набір простою мовою.",{"title":483,"searchDepth":484,"depth":484,"links":485},"",3,[486,488,489,490,491,492,493],{"id":27,"depth":487,"text":28},2,{"id":40,"depth":487,"text":41},{"id":63,"depth":487,"text":64},{"id":81,"depth":487,"text":82},{"id":291,"depth":487,"text":292},{"id":326,"depth":487,"text":327},{"id":443,"depth":487,"text":444},"Основи безпеки","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcover-1200x630.png","П’ять однакових білих плиток у ряд на темному тлі, того самого розміру й рівномірно розставлених, кожна з логотипом білдера.","Який білдер застосунків з ШІ найбезпечніший? Ми просканували 30 998 живих застосунків з Lovable, Base44, Replit, v0 і Bolt. Оцінку вирішує не білдер.",false,"md",[501,504,507,510,513],{"q":502,"a":503},"Який білдер робить найбезпечніші застосунки?","Жоден, якщо міряти. На 30 998 живих застосунках кожен білдер, який ми просканували, дав від 99 % до 100 % щонайменше з одним зауваженням, і більшість цього це відсутні заголовки безпеки, які ставить хостинг, а не ви. Різниця між білдерами це різниця в налаштуваннях за замовчуванням: що публікується поряд із вашим застосунком і як налаштоване з’єднання з вашим API. Жодне з цих налаштувань не дає серйозної оцінки.",{"q":505,"a":506},"Чи має взагалі значення, який білдер я обрав?","Має значення для того, що ви успадковуєте першого дня, і майже не має для того, що відбувається далі. Одні білдери публікують ваш вихідний код із кожним застосунком, інші ні. Одні за замовчуванням ставлять навстіж відкрите правило cross-origin, інші ні. Про це варто знати, і майже завжди варто змінити. Але зауваження, яке справді коштує людям їхніх даних, це відкрита на читання таблиця бази даних, і ви отримуєте її, підключивши базу й написавши дозвільне правило. Це можна зробити на будь-якому білдері.",{"q":508,"a":509},"Усі застосунки мого білдера провалили перевірку заголовків. Це моя провина?","Ні, і зазвичай ви не можете змінити це зсередини білдера. Заголовки безпеки надсилає те, що віддає ваш застосунок, тож на домені білдера вони є налаштуванням платформи за замовчуванням і однакові для кожного застосунку на ньому. Саме тому цифра для всіх п’ятьох становить 99 % або 100 %. І з тієї самої причини це найменш термінований рядок звіту: він справжній, його варто закрити, коли ви перейдете на власний домен, і він нічого не каже про те, чи може хтось дістатися до ваших даних.",{"q":511,"a":512},"У v0 нуль застосунків з оцінкою D або F. Він від цього найбезпечніший?","Він від цього той, у кого найменше підключених баз даних. Лише близько 1 % застосунків v0, які ми просканували, узагалі називали проєкт бази даних, проти 35 % застосунків Lovable, а перевірки, що дають D або F, це перевірки бази даних. У застосунку без бази менше того, що може піти не так, і менше того, що ми можемо подивитися. Читайте цей рядок як інформацію про те, чим є ці застосунки, а не про те, наскільки добре білдер їх захищає.",{"q":514,"a":515},"Чи варто перенести застосунок на інший білдер, щоб він став безпечнішим?","Ні. Перенесення означає перебудувати все, і воно майже нічого не змінює в цьому списку, бо зауваження, які мають значення, живуть у сервісах, які ви підключили, а не в білдері, що згенерував ваш код. Двоє, які варті роботи, це правила на ваших таблицях і будь-який секретний ключ, що лежить у вашому опублікованому коді. Обидва підуть за вами на будь-який білдер, і обидва виправляються там, де ви вже є.","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",[518,519,520,521,522],"найбезпечніший білдер застосунків з ші","який білдер застосунків з ші найбезпечніший","порівняння безпеки білдерів ші","lovable vs bolt безпека","чи безпечні застосунки зроблені ші",{},true,"\u002Fblog\u002Fsafest-ai-app-builder","2026-09-11",{"title":5,"description":497},"blog\u002Fsafest-ai-app-builder",[530,531,532],"Найбезпечнішого білдера застосунків з ШІ не існує. Усі п’ять, які ми просканували, дали від 99 % до 100 % щонайменше з одним зауваженням, і майже все це заголовок браузера, який ставить їхній хостинг.","Між білдерами різняться налаштування за замовчуванням, і розриви величезні. 3 229 source maps Base44 із 5 434 це власний скрипт значка платформи, а не чийсь застосунок; 225 Lovable із 18 553 це код власника.","Серйозну оцінку вирішує не білдер. Її вирішує те, чи підключили ви базу даних і чи лишили таблицю відкритою на читання.","2026-09-21","bhtjKs-qN4QUvqB3zKmw7F2LI6cfaV6szhjP6JE-pMM",[536,543,549,553,559,565,571,576,582,588,594,600,606,607,613,619,625,631,637,643,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,737,741,747,753,759,764,770],{"path":537,"title":538,"description":539,"published":540,"category":541,"image":542,"draft":498},"\u002Fblog\u002Fsupabase-backup-auth-users","Чому у вашому дампі Supabase немає користувачів","Запустіть supabase db dump окремо і отримаєте форму вашої бази та жодного її рядка, без схеми auth, у якій живуть ваші користувачі.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":544,"title":545,"description":546,"published":547,"category":494,"image":548,"draft":498},"\u002Fblog\u002Fdomain-and-certificate-expiry","Домен закінчився, сайт лежить: що буде далі","Ваш домен закінчився і сайт лежить. Ось який годинник уже пішов, чому прострочений сертифікат це менша з двох бід, і як перевірити обидва.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":321,"title":550,"description":551,"published":533,"category":494,"image":552,"draft":498},"Чи безпечний Lovable? Що показали 18 554 застосунки Lovable","Чи безпечний Lovable? Ми прогнали 18 554 живі застосунки Lovable через дев’ять перевірок. Платформа виявилася найчистішою з п’яти. Знахідки були в застосунках.","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":554,"title":555,"description":556,"published":557,"category":494,"image":558,"draft":498},"\u002Fblog\u002Fvibe-coded-app-security-checklist","Чек-лист безпеки для vibe coding, у девʼяти перевірках","Чек-лист безпеки для vibe coding із девʼяти пунктів, кожен з яких будь-хто може перевірити у вашому живому застосунку ззовні, і кожен має тест на один рядок.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":560,"title":561,"description":562,"published":563,"category":494,"image":564,"draft":498},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Секретний ключ Stripe у фронтенді може рухати гроші","Секретний ключ Stripe, відкритий у вашому фронтенді, може повертати кошти, списувати й читати кожну картку клієнта. А ключ pk_live_ там і має бути.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":566,"title":567,"description":568,"published":569,"category":494,"image":570,"draft":498},"\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":247,"title":572,"description":573,"published":574,"category":494,"image":575,"draft":498},"Безпека Base44: що позначає скан і що з цього виправляти вам","Безпека Base44 на 5 438 просканованих застосунках: три знахідки майже на кожному належать платформі, source map є бейджем Base44, а ваша частина коротка.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":577,"title":578,"description":579,"published":580,"category":494,"image":581,"draft":498},"\u002Fblog\u002Fis-cursor-ai-safe","Чи безпечний Cursor AI? Редактор, код і опублікований застосунок","Чи безпечний Cursor AI? Три запитання в одному пошуку: що Cursor зберігає, у чому помиляється його код і чи відкритий застосунок, який ви опублікували.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":583,"title":584,"description":585,"published":586,"category":494,"image":587,"draft":498},"\u002Fblog\u002Fis-replit-safe","Чи безпечний Replit? Що ми знайшли в 3 042 живих застосунках Replit","Чи безпечний Replit? Ми прогнали 3 042 живі застосунки Replit через дев’ять зовнішніх перевірок. Знахідки були в опублікованому застосунку, а не в хостингу.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":589,"title":590,"description":591,"published":592,"category":541,"image":593,"draft":498},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: у копії бази даних немає жодного файлу","Supabase storage backup це окрема робота. Копії бази даних зберігають список ваших файлів і жодного з них, тож після відновлення кожне завантаження зламане.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":595,"title":596,"description":597,"published":598,"category":541,"image":599,"draft":498},"\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":601,"title":602,"description":603,"published":604,"category":541,"image":605,"draft":498},"\u002Fblog\u002Fsupabase-project-paused-recover","Проєкт Supabase на паузі? Ваші дані нікуди не зникли","Supabase поставив ваш проєкт на паузу після тижня без активності. Нічого не видалено, кнопка Restore стоїть поруч із назвою, і у вас є рік, щоб натиснути.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":525,"title":5,"description":497,"published":526,"category":494,"image":516,"draft":498},{"path":608,"title":609,"description":610,"published":611,"category":494,"image":612,"draft":498},"\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":614,"title":615,"description":616,"published":617,"category":494,"image":618,"draft":498},"\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":620,"title":621,"description":622,"published":623,"category":494,"image":624,"draft":498},"\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":626,"title":627,"description":628,"published":629,"category":494,"image":630,"draft":498},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Сканери безпеки для vibe coding у порівнянні, наш теж","Найкращий сканер безпеки для vibe coding залежить від трьох питань, на які не відповідає жоден перелік функцій. Десять інструментів і ціни.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":632,"title":633,"description":634,"published":635,"category":494,"image":636,"draft":498},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: п’ять перевірок, які зробите самі","Supabase security checker читає ваш опублікований застосунок, а не налаштування проєкту. Ось п’ять перевірок і як виконати кожну самостійно.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":638,"title":639,"description":640,"published":641,"category":494,"image":642,"draft":498},"\u002Fblog\u002Fvibe-coding-security-scanner","Сканер безпеки для vibe coding: чого не бачить скан URL","Сканер безпеки для vibe coding читає ваш робочий застосунок ззовні. Що це охоплює, чотири речі, яких він не бачить, і як читати результат.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":76,"title":644,"description":645,"published":646,"category":494,"image":647,"draft":498},"Відсутні заголовки безпеки: коли це справді важливо","Відсутні заголовки безпеки трапляються в наших звітах найчастіше. Від чого вони захищають і коли це найменш терміновий рядок вашого звіту.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":649,"title":650,"description":651,"published":652,"category":494,"image":653,"draft":498},"\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":655,"title":656,"description":657,"published":658,"category":494,"image":659,"draft":498},"\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":661,"title":662,"description":663,"published":664,"category":541,"image":665,"draft":498},"\u002Fblog\u002Fsupabase-backup-tools-compared","Інструменти резервного копіювання Supabase, і наш серед них","Чотири види інструментів резервного копіювання Supabase, що копіює кожен і коли безкоштовна GitHub Action виграє в будь-якої оплати, нашої теж.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":667,"title":668,"description":669,"published":670,"category":494,"image":671,"draft":498},"\u002Fblog\u002Freplit-secrets-explained","Як користуватися секретами в Replit і що все одно публікується","Як користуватися секретами в Replit: додати, прочитати і усунути дві причини undefined. А ще ключі, які цей інструмент не здатен зберегти в таємниці.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":673,"title":674,"description":675,"published":676,"category":541,"image":677,"draft":498},"\u002Fblog\u002Fback-up-supabase-free-tier","Резервні копії на безкоштовному тарифі Supabase без терміналу","На безкоштовному тарифі Supabase резервних копій немає: копію робите ви. Як зробити її з панелі та що втрачає шлях через CSV.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":679,"title":680,"description":681,"published":682,"category":494,"image":683,"draft":498},"\u002Fblog\u002Fis-supabase-secure","Чи безпечний Supabase? Так. Ваш проєкт це інше питання","Чи безпечний Supabase? Платформа проходить аудити, шифрує дані й тримає пентести. Їхня документація каже, де це закінчується і починаються ваші налаштування.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":685,"title":686,"description":687,"published":688,"category":494,"image":689,"draft":498},"\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":691,"title":692,"description":693,"published":694,"category":494,"image":695,"draft":498},"\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":697,"title":698,"description":699,"published":700,"category":494,"image":701,"draft":498},"\u002Fblog\u002Fcors-wildcard-security-risk","Чи є вайлдкард CORS ризиком для безпеки? Майже ніколи.","Чи є вайлдкард CORS ризиком для безпеки? Зазвичай це типове налаштування вашого білдера, і воно не видає нічого, що ваш сервер і так віддавав кожному.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":703,"title":704,"description":705,"published":706,"category":541,"image":707,"draft":498},"\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":709,"title":710,"description":711,"published":712,"category":541,"image":713,"draft":498},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Як відновити резервну копію Supabase, і що ламається потім","Як відновити резервну копію Supabase з панелі або з файлу дампа, що саме замінює відновлення і чому ваш застосунок може лишитися зламаним після нього.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":715,"title":716,"description":717,"published":718,"category":494,"image":719,"draft":498},"\u002Fblog\u002Fsupabase-storage-bucket-public","Ваш бакет Supabase Storage публічний. Чи це проблема?","Публічний бакет Supabase Storage означає, що той, хто має URL файлу, може його відкрити. Він не означає, що хтось може переглянути список вмісту.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":721,"title":722,"description":723,"published":724,"category":494,"image":725,"draft":498},"\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":727,"title":728,"description":729,"published":730,"category":541,"image":731,"draft":498},"\u002Fblog\u002Fai-agent-deleted-my-database","ШІ-агент видалив мої дані в Supabase. Що можна відновити?","ШІ-агент видалив дані з вашої бази. Те, що ви зможете відновити, вирішилося раніше, а наступні хвилини вирішують, скільки з цього вціліє.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":313,"title":733,"description":734,"published":735,"category":494,"image":736,"draft":498},"Чи може будь-хто прочитати вашу базу Supabase? 3 680 застосунків","Чи може будь-хто прочитати вашу базу даних Supabase без входу? Ми просканували 30 998 живих застосунків, зроблених ШІ-білдерами, і виміряли, як часто так.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":255,"title":738,"description":739,"published":735,"category":494,"image":740,"draft":498},"Відкриті source maps: ваш застосунок публікує свій вихідний код","Відкрита source map дає будь-кому прочитати оригінальний код вашого застосунку, разом із коментарями. Перевірка за 30 секунд, і що важить насправді.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":742,"title":743,"description":744,"published":745,"category":494,"image":746,"draft":498},"\u002Fblog\u002Fsupabase-new-api-keys","Нові API-ключі Supabase: який із них безпечний у застосунку?","Supabase замінив anon і service_role публічними та секретними ключами. Який із них має бути у вашому застосунку, а який не має бути ніколи?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":748,"title":749,"description":750,"published":751,"category":541,"image":752,"draft":498},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Чи робить Supabase резервні копії моєї бази? Залежить від тарифу.","Чи робить Supabase резервні копії вашої бази даних? На платних тарифах щодня, на безкоштовному жодної. Як дізнатися, що у вас насправді є.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":754,"title":755,"description":756,"published":757,"category":494,"image":758,"draft":498},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security увімкнено. Таблиця досі публічна.","Увімкнути Supabase Row Level Security не означає захистити таблицю. Захищають політики, а та, що полагодила застосунок, часто впускає всіх.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":760,"title":761,"description":762,"published":757,"category":541,"image":763,"draft":498},"\u002Fblog\u002Fversion-history-is-not-a-backup","Історія версій не є резервною копією. Вона не поверне таблицю.","Lovable і Bolt ведуть історію версій вашого коду. Ваша база даних працює як окремий сервіс, тож відкат назад не поверне ваші дані.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":765,"title":766,"description":767,"published":768,"category":541,"image":769,"draft":498},"\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":771,"title":772,"description":773,"published":768,"category":494,"image":774,"draft":498},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Які API-ключі безпечні у браузері, а які ні","Ваш ключ anon у Supabase створений, щоб бути публічним. Ключ service_role для цього не створений, і він ігнорує всі правила, які ви задали. Як їх розрізнити.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1790150956266]