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