Чи безпечний ваш застосунок на Replit?
Чи годиться Replit для справжнього застосунку? Складання й публікація там становлять один крок, і це зручно. Саме тому перевірки й варті того.

Логотипи належать їхнім власникам і показані, щоб позначити сумісність.
Коротко
- Застосунок на Replit безпечно хостити, але складання й публікація зливаються в один рух: немає окремого кроку деплою, на якому спіймати помилку.
- Replit Secrets тримає ключ поза вашими файлами. Він не втримає його поза браузером, якщо читає ключ саме ваш браузерний код.
- Якщо ваші дані в Supabase, хто може їх читати, вирішує Row Level Security, і вона задається окремо для кожної таблиці.
Replit виконує ваш застосунок і публікує його з того самого місця, де ви його будуєте. У цьому й полягає більша частина його привабливості, і це ж означає, що відстань між «я щось змінив» і «інтернет це бачить» приблизно нульова. Немає окремого кроку деплою, на якому можна зупинитися й подумати.
Ось що гайд за гайдом подає неправильно: зберегти ключ у менеджері секретів не робить його приватним. Менеджер вирішує, де значення лежить. Ваш код вирішує, куди воно мандрує, і якщо ваш код несе його у браузер, там воно й опиняється.
Що опублікований застосунок на Replit вручає відвідувачу
Увесь свій фасад, щоразу.
Уявіть крамницю. Сторінки, форми й кнопки вашого застосунку є вітриною, яку цілком вручають кожному відвідувачу, що відкриває ваш сайт: браузер не намалює сторінки, якої йому не надіслали. Ваші дані живуть на складі, окремій будівлі в інтернеті з власною адресою й власним замком.
Нюанс, який на Replit проґавлюють: де проходить межа. Код, що виконується на сервері, і код, що виконується у браузері відвідувача, лежать в одному проєкті, часто в сусідніх файлах. Значення, прочитане на сервері, лишається на сервері. Те саме значення, прочитане браузерним кодом, вкомпільовується у те, що ви публікуєте. Replit Secrets тримає ключ поза вашими вихідними файлами, і це справді корисно, але вирішити, яка половина вашого застосунку його читає, він не може.
Чи погано, що в моєму застосунку на Replit є ключ?
Зазвичай ні. Залежить від того, який саме, а є два, що майже не відрізняються.
Публічний ключ ідентифікує ваш проєкт і більше нічого. Supabase називає його
sb_publishable_… у нових проєктах і anon у старіших, і його зроблено, щоб
лежати у браузері. Секретний ключ (sb_secret_… або service_role до
перейменування) ігнорує кожне встановлене вами правило й читає та змінює кожен
рядок у кожній таблиці.
Якщо сканер каже вам, що ключ у відкритому доступі, це перше, що треба з'ясувати: одне з цього – звичайний вівторок, а інше варте того, щоб зупинитися. Перевірка займає близько хвилини.
А «ніхто не знає мого URL» не захист. Автоматичні краулери читають публічні сайти в пошуках саме таких рядків, безперервно, не маючи жодного уявлення, хто ви.
Що вирішує, чи можуть сторонні читати ваші дані
Правила на вашій базі даних, які взагалі не є частиною вашого проєкту на Replit.
Якщо ваші дані в Supabase, це налаштування зветься Row Level Security: перемикач для кожної таблиці, який рядок за рядком вирішує, кому що читати. Якщо вимкнений, ваш публічний ключ віддає кожному всю таблицю. Якщо ввімкнений, із написаною політикою, він повертає лише те, що ця політика дозволяє.
Дві речі вирішують, чи є вона у вас, і жодної з них не видно зсередини вашого застосунку. Supabase вмикає Row Level Security за замовчуванням для таблиць, створених у Table Editor панелі, і не вмикає для створених виконанням SQL, а саме так їх створює файл міграції або помічник, що пише вашу схему. І таблиця може мати це налаштування, доки її політика й далі пропускає всіх, тож сам перемикач нікого не обмежує.
Прибрати сторінку із застосунку на Replit не змінює нічого з цього. Склад не знає, що ваша вітрина існує.
Як перевірити власний застосунок на Replit приблизно за десять хвилин
З'ясуйте, яка половина читає кожен секрет. Для кожного ключа в проєкті знайдіть код, що ним користується, і вирішіть, чи виконується цей код на сервері, чи у браузері. Усе, що читає браузер, є опублікованим, хоч би де воно зберігалося.
Відкрийте власний опублікований застосунок і запустіть DevTools. Вкладка «Мережа» показує рівно те, що отримує відвідувач. Це той самий вигляд, який має стороння людина, і він закриває питання швидше за читання файлів.
Відкрийте в Supabase Authentication → Policies. Усе, де Row Level Security показано як вимкнену, може прочитати кожен, у кого є адреса вашого проєкту.
А потім подивіться ззовні як слід. Саме для цього є наше безкоштовне сканування: воно читає ваш живий сайт так, як це зробив би будь-який відвідувач, і дає оцінку приблизно за 20 секунд, без акаунта: сканувати застосунок.
Що робити
- На Replit складання й публікація зливаються в один рух. Немає кроку деплою, на якому спіймати помилку.
- Менеджер секретів береже значення в спокої. Браузерний код публікує те, що читає, звідки б значення не взялося.
- Публічний ключ у застосунку доречний.
sb_secret_…іservice_roleварто замінити сьогодні. - Таблиці, створені виконанням SQL, стартують без Row Level Security, і після ввімкнення кожен рядок лишається читабельним, доки політика не скаже інакше.
- Невідомий URL не є захистом. Краулерам не треба знати, хто ви, щоб знайти ваш сайт.
Візьміть ключ, яким ваш застосунок користується найчастіше, і простежте, яка половина проєкту його читає: сервер чи браузер. Ця одна відповідь скаже більше, ніж будь-яка кількість читання, а 10-хвилинний чекліст безпеки охопить решту поверхні, коли вона у вас буде.
Що насправді може піти не так із застосунком на Replit
Жоден із цих пунктів не означає, що ви зробили щось не так: це звичайні побічні ефекти швидкої розробки. Ось що варто перевірити:
Секретний ключ у коді замість Replit Secrets
Replit дає вам менеджер Secrets, щоб ключі лишалися поза кодом. Але спокусливо вставити ключ прямо у файл, щоб усе запрацювало, і якщо цей файл виконується у браузері або ваш Repl публічний, будь-хто може його прочитати. Reeve знаходить ключі у завантаженому коді застосунку й підказує, які безпечно розкривати, а які треба перенести.
Публічний Repl, що розкриває ваш код (і ключі)
На багатьох тарифах Repl-и публічні за замовчуванням, тобто ваш код і все, що в ньому жорстко прописано, може прочитати будь-хто з посиланням. Reeve перевіряє, що ваш задеплоєний застосунок розкриває ззовні, щоб ви знали, чи видно приватні деталі.
Відкрита база даних (RLS вимкнено)
Якщо ваш застосунок зберігає дані (у базі даних Replit, Supabase чи іншому Postgres), зазвичай є правило, хто може читати чи змінювати кожен рядок. Якщо воно вимкнене чи неправильно налаштоване, ваші таблиці можуть бути відкриті будь-кому, хто знайде адресу. Це найпоширеніша серйозна проблема, і вона ховається, доки не перевіриш.
Відкритий файл .env або конфігурації
Ключі часто живуть у файлі .env, який не мав би потрапляти в реліз. Іноді він усе одно стає досяжним на задеплоєному сайті, а це пряма стежка до всього найчутливішого. Reeve перевіряє, чи не доступний ваш файл потихеньку.
Увімкнені Source maps
«Карта коду» (source map) розкриває оригінальний код вашого застосунку будь-кому, хто подивиться. Зручно під час розробки, але в продакшні дає стороннім читабельну копію того, як влаштований застосунок, і полегшує пошук інших прогалин. Reeve перевіряє, чи не відкриті ваші карти.
Відсутні заголовки безпеки та відкриті ендпоінти
Невеликі налаштування, що підказують браузерам, як захищати ваших відвідувачів, а також те, чи відповідають точки доступу до даних будь-кому чи будь-якому сайту. Окремо це дрібниці; разом вони розширюють щілину. Reeve позначає те, чого бракує.
Що таке Reeve і чим він не є
Reeve є безкоштовною перевіркою ззовні в режимі читання, наче інспектор, який перевіряє двері, не заходячи всередину. Це швидко, і це ловить поширені помилки з великими наслідками. Це не повний аудит безпеки, і чиста оцінка не є гарантією: вона означає, що очевидні двері зачинені.
Replit дає хороші інструменти (менеджер Secrets і контроль над тим, чи публічний Repl), і вони справді допомагають, коли ви ними користуєтесь. Що додає Reeve: перевірку того, що ваш задеплоєний застосунок насправді розкриває ззовні, на випадок, якщо ключ прослизнув у код або Repl виявився публічнішим, ніж ви думали, пояснену простими словами, за якими можна діяти. А якщо ви не хочете про це думати, ми можемо стежити за ним замість вас.
Хочете, щоб цим займалися, а не лише перевірили?
Reeve Care продовжує стежити за вашим застосунком, робить резервні копії даних і допомагає полагодити, коли щось ламається, щоб ви могли будувати далі, а не хвилюватися.
Дізнатися про Reeve CareПоширені запитання
Чи безпечні застосунки на Replit за замовчуванням?
Replit дає складові для безпеки (Secrets, контроль деплою), але «за замовчуванням» залежить від того, чи лишилися ключі в Secrets, чи ваш Repl приватний і чи ввімкнені правила бази даних. Дізнатися можна, лише перевіривши, що відкрито; Reeve робить це безкоштовно приблизно за 20 секунд.
Чи безпечно тримати API-ключі у своєму коді на Replit?
Значно безпечніше тримати їх у Replit Secrets, ніж у коді. Ключ, вписаний у файл, можна прочитати, якщо цей код виконується у браузері або ваш Repl публічний. Reeve знаходить ключі у вашому завантаженому застосунку й підказує, які безпечно розкривати, а які треба перенести в Secrets.
Чи можуть люди бачити мій код, якщо мій Repl публічний?
Так. Публічний Repl означає, що ваш код і все, що в ньому жорстко прописано, може прочитати будь-хто з посиланням. Reeve перевіряє, що ваш задеплоєний застосунок розкриває ззовні, щоб ви могли зрозуміти, чи не видно приватних деталей.
Чи зламає сканування мій застосунок на Replit?
Ні. Reeve дивиться лише на те, що вже публічне ззовні. Він ніколи не входить в акаунти, нічого не змінює й не завантажує ваших файлів. Режим читання, наче перевірка, чи замкнені двері, не заходячи всередину.
Я поклав ключі у Replit Secrets, а не в код. Це робить їх приватними?
Це тримає їх поза вашими файлами, і це варто робити, бо воно розв'язує справжню проблему. Але приватним значення не стає, щойно ваш застосунок надсилає його у браузер. Якщо код, який використовує ключ, виконується у браузері відвідувача, ключ потрапляє туди, хоч би де він зберігався. Менеджер секретів береже значення в спокої, а виносить його до відвідувача саме ваш застосунок.
Мій застосунок на Replit маленький, і ніхто не знає URL. Цього досить?
Ні, і причина в тому, що вас не мусять знати. Автоматичні краулери безперервно обходять публічні сайти в пошуках рядків, схожих на ключі, і відкритих точок доступу до баз даних, не маючи жодного уявлення, кому вони належать. Бути невідомим не те саме, що бути недосяжним.
Куди дивитися, щоб дізнатися, чи відкрита моя база даних?
Якщо ви користуєтесь Supabase, відкрийте проєкт і перейдіть до Authentication, потім до Policies. Там перелічено кожну таблицю схеми public і показано, чи ввімкнено Row Level Security. Усе вимкнене може прочитати кожен, у кого є URL вашого проєкту й публічний ключ, і обидві ці речі лежать усередині опублікованого застосунку.