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