Перейти до вмісту

Чи безпечний ваш застосунок на Base44?

Base44 тримає вашу базу даних поза інтернетом, і це прибирає найбільший ризик швидко зроблених застосунків. Лишається короткий список, майже завжди той самий.

Vlad Tkachenko7 хв читання
Картка перевірки безпеки Reeve для застосунків на Base44, з логотипом Base44 на білій плитці.

Логотипи належать їхнім власникам і показані, щоб позначити сумісність.

Коротко

  • Base44 не виставляє вашу базу даних в інтернет. Помилка, через яку витікає більшість швидко зроблених застосунків, вам просто недоступна, і це справжня перевага.
  • Ризик переходить на те, що бачить браузер: API, яке відповідає будь-якому сайту, і ваш вихідний код, опублікований поруч із застосунком. Ці двоє є майже в кожному застосунку на Base44, який ми перевіряємо.
  • Базу даних Base44 ніхто не перевірить ззовні, і ми теж. Якщо ви під’єднали власний проєкт Supabase, ця частина перевіряється, і перевірити варто.

Base44 робить те, чого не роблять інші білдери, і це варто знати ще до того, як шукати проблеми: ваші дані ніколи не відповідають інтернету напряму.

Ваш застосунок щось просить у Base44, Base44 просить у бази даних, і відповідь повертається тим самим шляхом. Немає адреси, яку міг би набрати незнайомець. У більшості швидко зроблених застосунків найбільша причина витоку даних це таблиця, яку прочитає будь-хто з адресою проєкту, і на Base44 така помилка вам просто недоступна.

І ось та частина, яку посібник за посібником переказує неправильно: це не робить ваш застосунок безпечним, це робить його безпечним в одному конкретному сенсі. Ризик переміщується, і куди саме, передбачувано настільки, що ми можемо сказати вам це вже зараз, до будь-якої перевірки.

Що Base44 тримає поза інтернетом замість вас

Склад, якщо триматися очевидного порівняння.

Уявіть застосунок крамницею. Усе, що завантажує браузер відвідувача, становить вітрину, і її повністю віддають кожному, хто відкриє сторінку: браузер не покаже того, чого йому не надіслали. За нею стоїть склад, ваші дані. У більшості білдерів склад є окремою будівлею з власною адресою на тій самій вулиці, і чи зайдуть туди незнайомці, залежить від налаштування, якого ви, можливо, ніколи не бачили. У Base44 дверей на вулицю немає.

Пунктир це шлях, який мають інші білдери. Його намальовано тут, щоб ви побачили, чого бракує навмисно.

На практиці це означає, що нема чого вставити в браузер. У застосунку з Supabase позаду будь-хто витягне адресу проєкту з вашого пакунка, додасть назву таблиці й подивиться, що повернеться. Зробіть те саме із застосунком на Base44, і єдина адреса, яку ви знайдете, буде ваша власна, на вашому домені, і відповідатиме вона те, для чого застосунок писали.

Це видно з оцінок. Серед застосунків на Base44 у нашому дослідженні живих застосунків майже кожен отримує A або B, а збої, що тягнуть інші білдери до D, майже не трапляються.

Є в цього і чесний наслідок: ззовні цього не перевірить ніхто, і ми теж. Перевірка з інтернету може смикати лише ті двері, що існують. Тут їх немає, тож і повідомляти нема про що, а сканер, який на цій підставі надрукував би "база даних: безпечна", вигадував би результат.

Чи є ключ у вашому застосунку на Base44 проблемою?

Зазвичай ні, і два види ключів виглядають майже однаково.

Обидва звуться ключами API. Лише один із них колись задумували читабельним.

Ключ, який можна публікувати, називає проєкт і більше нічого не робить. Він створений, щоб його читали, і знайти його не означає нічого знайти. Секретний ключ, той, що пишеться як sb_secret_…, service_role чи sk_live_…, обходить кожне написане вами правило й може все читати й змінювати.

Base44 тримає власні облікові дані на сервері, тож ключ у вашому застосунку зазвичай узагалі не належить Base44. Він від чогось, що ви під’єднали самі: ключ від карт, аналітики чи платежів, вставлений, щоб запрацювала одна функція. Найчастіше в застосунках на Base44 ми знаходимо ключ Google API, і його варто зрозуміти, а не лякатися, бо необмежений ключ можуть витратити чужі люди. Прочитати, який саме ключ у вас, займає близько хвилини.

Якщо ви таки знайшли справжній секрет, порядок дій важить. Перевипустіть його там, де його видали, у Google Cloud, Stripe чи звідки він походить, і лише потім приберіть із коду. Спершу видалити рядок означає не закрити нічого: старе значення вже лежить у кожній кешованій копії вашого сайту й у тому, що краулер забрав минулого тижня.

Налаштування, яке неправильне майже в кожному застосунку на Base44

Не ключ і не база даних. Ідеться про те, з ким ваше API згодне говорити.

Браузер зазвичай не дає одному сайту читати дані іншого. Саме це правило не дозволяє сторінці, яку ви відкрили, тихцем звернутися до вашого банку й показати комусь ваш баланс. Заголовок відповіді під назвою CORS його скасовує, а виставлений у * скасовує для всіх: сайт, про який ви ніколи не чули, може викликати API вашого застосунку з браузера вашого відвідувача й прочитати те, що повернеться.

На перевірених нами застосунках Base44 це найпоширеніша знахідка з великим відривом. Вона ж і найбільш дискусійна, і заперечення тут доречні, тож ось чесна версія. Зірочка перед адресою, яка вимагає входу, є слабкою знахідкою, бо чужому сайту однаково нема чого надіслати. Зірочка перед адресою, яка відповідає будь-кому, є справжньою справою, і приблизно половина перевірених нами застосунків на Base44 має щонайменше одну адресу, яка віддає дані на простий запит без жодного входу. Це дві різні проблеми під однією назвою, і шукати варто другу.

Жодна з них не є вашою помилкою. Зірочку віддає інструмент збірки, коли йому не сказали інакше, зазвичай щоб і домен попереднього перегляду, і живий домен працювали, поки ви будуєте. У короткому тексті є розв’язок, і полягає він у тому, щоб замість зірочки вписати власний домен.

Ваш вихідний код, опублікований поруч із застосунком

Друга за поширеністю знахідка, і та, яку ви перевірите взагалі без інструментів.

Source map це файл, який перетворює стиснений JavaScript, що виконує браузер, назад на написане вами, зі справжніми іменами файлів, коментарями й структурою тек. Інструменти збірки роблять їх, щоб помилка в продакшені вказувала на живий рядок, а не на колонку 4812 одного величезного файлу. Ця частина справді корисна. Публікувати їх поруч із застосунком це та частина, яка вам коштує.

Приблизно три з п’яти перевірених нами застосунків на Base44 віддають свої. Жодні дані через це не витікають, і застосунок ні в чому не поводиться інакше, через що це місяцями лишається непоміченим. Змінюється зусилля на все інше: виколупати адресу зі стисненого пакунка це повільна морока, а прочитати власний код це взагалі не робота. Кожна інша знахідка на цій сторінці стає дешевшою в пошуку, щойно ваш код читабельний.

Перевірка займає менше хвилини. Відкрийте живий застосунок, натисніть F12 і подивіться на панель Sources. Якщо дерево файлів там схоже на ваш проєкт, з іменами, які ви давали, значить maps поїхали разом із публікацією, а довгий текст розповідає, що змінити.

Якщо ви під’єднали власну базу даних

Тоді перевага з початку цієї сторінки на цю частину не поширюється, і звичні правила повертаються.

Ця картинка про базу даних, яку ви під’єднали самі. У власних даних Base44 стрілки від незнайомця немає.

Приблизно чверть застосунків на Base44, які ми перевіряємо, називає власний проєкт Supabase. Цей проєкт відповідає інтернету напряму, точно як у будь-якого іншого білдера, тож Row Level Security тепер ваша: перемикач для кожної таблиці, який рядок за рядком вирішує, хто що може читати.

Дві речі визначають, чи є вона у вас. Supabase вмикає її за замовчуванням для таблиць, створених у Table Editor панелі, і не вмикає для таблиць, створених виконанням SQL, а саме так їх створює більшість згенерованих налаштувань. І перемикач це лише половина, бо політика, яка дозволяє всім, лишає таблицю відкритою, поки панель звітує, що вона захищена.

Зі сховищем так само, і про нього легко забути, бо воно живе в іншій частині панелі, ніж правила таблиць. Позначений публічним бакет може перелічити й завантажити будь-хто, хто знає про його існування, незалежно від того, чи посилається ваш застосунок на якийсь файл усередині, а налаштування, які це вирішують, варто одного разу спокійно прочитати.

Як перевірити свій застосунок на Base44 хвилин за десять

Запитайте, що ваше API каже іншим сайтам. Це найімовірніше налаштоване неправильно і на це ніхто не дивиться, бо в самому застосунку нічого не поводиться дивно, коли воно надто широке.

Відкрийте живий застосунок через F12 і прочитайте панель Sources. Якщо ваші власні файли перелічені там під власними іменами, будь-хто інший перелічить їх так само.

Прочитайте кожен ключ у застосунку. Про кожен спитайте себе, чи поклали б ви його на головну сторінку. Якщо ні, його місце на сервері, і перевипустити його треба в джерелі, перш ніж прибирати з коду.

Відкрийте Authentication → Policies, якщо ви під’єднали власний проєкт Supabase. Будь-яка таблиця, у якої Row Level Security вимкнена, відповідає кожному, хто має адресу проєкту, а ця адреса є у вашому застосунку.

А потім подивіться ззовні. Кроки вище кажуть, що налаштовано. Що насправді дістає незнайомець, це інше питання, і саме на нього відповідає наша безкоштовна перевірка. Вона читає ваш живий сайт як відвідувач і дає оцінку приблизно за 20 секунд, без акаунта: перевірити застосунок.

Що робити

  • Base44 тримає вашу базу даних поза інтернетом. Найбільша причина витоку даних у швидко зроблених застосунках вам недоступна.
  • Ззовні цього не перевірить ніхто, і ми теж. Немає дверей, немає результату, а відсутність результату не є зеленою галочкою.
  • Ризик переходить у браузер: API, яке відповідає будь-якому сайту, і ваш вихідний код, опублікований поруч із застосунком.
  • Зірочка перед адресою, яка не вимагає входу, і є тією версією, що важить, а має її приблизно половина цих застосунків.
  • Ключ у вашому пакунку зазвичай від сервісу, який ви під’єднали самі. Перевипустіть його в джерелі, а тоді видаліть із коду.
  • Під’єднайте власний проєкт Supabase, і звичні правила Row Level Security та сховища діють для нього в повному обсязі.

Почніть із двох, які майже завжди варті уваги: що ваше API каже іншим сайтам і чи не поїхав ваш вихідний код разом із застосунком. Далі решту покриє 10-хвилинний чекліст безпеки.

Що насправді може піти не так у застосунку на Base44

За порядком того, як часто ми це справді бачимо на Base44, а це не той порядок, який ви б припустили. Ніщо з переліченого не означає, що ви зробили щось не так.

  • Ваш API відповідає будь-якому сайту

    Це найпоширеніший випадок на Base44, і з великим відривом. Зазвичай браузер не дає одному сайту читати дані іншого, а налаштування під назвою CORS саме це правило й скасовує. Виставлене в "*", воно скасовує його для всіх: сторінка, про яку ви ніколи не чули, може звертатися до API вашого застосунку з браузера вашого відвідувача. Reeve перевіряє, що ваш застосунок каже браузерам про це.

  • Ваш вихідний код виїхав разом із застосунком

    Source map віддає читабельну копію написаного вами коду, опубліковану поруч із тією версією, яку виконує браузер. Зручно, поки ви будуєте, і подарунок незнайомцю, коли ви вже онлайн: замість «колупатися в стисненому пакунку» виходить «читати застосунок». Сам по собі він нічого не зливає. Він робить усе інше легшим для пошуку.

  • Бракує захисних заголовків

    Кілька заголовків кажуть браузеру, як захищати ваших відвідувачів: не вгадувати типи файлів, не дозволяти іншому сайту вставляти цю сторінку в рамку, не віддавати повну адресу на виході. Поодинці вони дрібні. Разом вони вирішують, скільки хтось зможе зробити з усім іншим, що знайде.

  • Ключ від чогось, що ви під’єднали самі

    Base44 тримає власні облікові дані на сервері, тож ключі, які трапляються, зазвичай від сервісу, який ви під’єднали самі: ключ від карт, аналітики чи платежів, вставлений, щоб запрацювала якась функція. Деякі ключі мають бути в браузері, і це нормально. Reeve читає завантажений код вашого застосунку, знаходить ключі й каже, який із них який, ніколи не зберігаючи справжніх значень.

  • База даних, яку ви під’єднали самі

    Якщо ви причепили власний проєкт Supabase замість вбудованих даних Base44, ви взяли на себе і його правила. Row Level Security вирішує, хто може читати кожен рядок, і вона вимкнена за замовчуванням для таблиць, створених виконанням SQL. Це єдиний шлях, яким звична проблема відкритої бази все-таки дістається застосунку на Base44. Reeve перевіряє підрахунком рядків, ніколи їх не читаючи.

  • Файли, які будь-хто може переглянути списком

    Завантажене потрапляє у сховища-«бакети», і публічний бакет дозволяє будь-кому переглянути список і скачати те, що всередині: рахунки, документи, приватні фото. Reeve перевіряє, чи можна отримати список ваших бакетів. Файлів він не завантажує ніколи.

Чим Reeve є і чим не є

Reeve є безкоштовною перевіркою ззовні в режимі читання, наче інспектор, що смикає двері, не заходячи всередину. Вона швидко знаходить поширені й дорогі помилки. Це не повний аудит безпеки, і хороша оцінка не є гарантією; вона означає, що очевидні двері зачинені.

Застосунки на Base44 мають кращі оцінки, ніж більшість, і це справжній результат, а не комплімент: платформа бере на себе ту частину, яка зазвичай ламається. Лишається короткий і доволі однаковий список, і це добра новина, бо короткий список можна закінчити. А якщо ви волієте, щоб стежити було не вашою роботою, зробимо її своєю.

Хочете, щоб цим займалися, а не просто перевірили?

Reeve Care стежить за вашим застосунком, робить копії ваших даних і допомагає лагодити те, що зламалося, щоб ви будували далі замість хвилюватися.

Дізнатися про Reeve Care

Поширені запитання

Чи безпечніший застосунок на Base44 за зроблений деінде?

В одному конкретному аспекті так. Ваша база даних недосяжна з інтернету, тож ви не можете зробити помилку, яка викриває більшість швидко зроблених застосунків: таблицю, яку прочитає будь-хто з адресою. Це найбільша причина витоків даних у застосунках на кшталт вашого, і Base44 знімає її з вас. Усе, що бачить браузер, лишається на вас.

Чи може Reeve перевірити мою базу даних у Base44?

Ні, і ззовні цього не може ніхто. Ваші дані йдуть через власний бекенд Base44, а не відповідають інтернету напряму, тож немає дверей, які перевірка могла б смикнути. Ми пишемо про це й на нашій сторінці дослідження, і краще скажемо вам це, ніж надрукуємо зелену галочку, якої не заслужили. Якщо ви під’єднали власний проєкт Supabase, цю частину ми перевірити можемо.

У моєму застосунку є ключ API. Це проблема?

Залежить винятково від того, який. Одні створені бути публічними, і без них застосунок не працює; інші віддають цілий акаунт. Base44 тримає власні облікові дані на сервері, тож ключ у вашому пакунку зазвичай від сервісу, який ви під’єднали самі. Reeve читає тип ключа і словами каже, який саме у вас, не зберігаючи значення.

Чи змінить щось перевірка мого застосунку на Base44?

Ні. Reeve дивиться лише на те, що вже публічне ззовні. Він ніколи не входить в акаунт, нічого не змінює і не завантажує ваших файлів. Тільки читання, як перевірити, чи зачинені двері, не заходячи всередину.

Якщо моя база даних недосяжна, чи лишається взагалі про що хвилюватися?

Так, але список коротший, ніж у більшості. Ваш застосунок усе одно працює в браузері, а все, що браузер отримує, є публічним: код, будь-які вбудовані в нього ключі й адреси, які він викликає. Перевірити варто дві речі: чи відповідають ці адреси на запити з інших сайтів, і чи не поїхала разом із публікацією читабельна копія вашого вихідного коду.

Якщо ззовні цього ніхто не перевірить, звідки мені знати, що з даними все гаразд?

Зсередини, бо лише там ця відповідь існує. Оскільки запити йдуть через Base44, а не на публічну адресу, усе, що визначає, хто що може читати, живе у вашому застосунку й у платформі, куди незнайомець не дотягнеться. Тож корисні питання такі: хто може зареєструватися, що бачить зареєстрована людина і чи не робився якийсь екран із розрахунку, що ніхто не гляне. Перевірка ззовні не відповідає на жодне з них. Вона відповідає на іншу половину: що людина дістає взагалі без реєстрації.

Перевірка каже, що моє API відповідає будь-якому сайту. Це я так налаштував?

Майже напевно не навмисно. Зірочку віддає інструмент збірки, коли йому не сказали інакше, зазвичай щоб і адреса попереднього перегляду, і жива адреса працювали, поки ви будуєте. Вона доживає до продакшену, бо в застосунку нічого не ламається від того, що вона надто широка. Наскільки це важливо, вирішує адреса за нею: якщо та вимагає входу, знахідка слабка. Якщо вона відповідає будь-кому, це та версія, яку варто закрити цього тижня.

Я під’єднав власний проєкт Supabase до застосунку на Base44. Це щось змінює?

Змінює найважливіше. Ваш власний проєкт відповідає інтернету напряму, тож налаштування Row Level Security для кожної таблиці тепер ваше, і воно вимкнене за замовчуванням для будь-якої таблиці, створеної виконанням SQL. Це єдиний шлях, яким класична проблема відкритої бази дістається застосунку на Base44, і він вартий десяти хвилин вашого часу.

Автор

Vlad Tkachenko

Засновник Reeve

Я щодня дивлюся на застосунки, зібрані в Lovable, Bolt, v0, Cursor і Replit, і на короткий список помилок, які трапляються в них знову і знову.

Більше про автора

Зроблено деінде? У нас є такий самий чесний огляд для:

← Усі гайди з безпеки конструкторів

Автоматична зовнішня перевірка, а не повний аудит. Відсутність знахідок не є гарантією безпеки.