На головну

Безпека і приватність

Оновлено

Пілотна редакція від 2026-10-15; буде уточнена після огляду юриста. Сервіс у пілоті, тому текст написано простою мовою і він може змінитися. Підсвічені місця в [дужках] заповнимо, щойно їх буде визначено.

Електронна версія: https://partneroom.cv.biz.ua/security/

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

1. Вхід і акаунти

  • Паролі зберігаються лише як хеш Argon2id. Пароль має бути не коротшим за 10 символів; занадто прості, поширені або схожі на імʼя чи email паролі сервіс не приймає.
  • Обмеження спроб. Вхід — не більше 5 невдалих спроб на одну адресу і 30 з однієї IP-адреси за 10 хвилин; блокування адреси не заважає входити іншим людям. Реєстрація, прийняття запрошення, скидання пароля і форма листа очікування мають ліміти і на IP-адресу, і на email. Лічильники зберігаються в базі на сервері, а не в памʼяті процесу.
  • Двофакторна автентифікація (за бажанням): після пароля — шестизначний код із застосунку-автентифікатора (TOTP). Той самий код удруге не спрацює. Є 10 одноразових кодів відновлення; у базі вони лежать лише як хеш. Власник може вимагати 2FA від власників і партнерських менеджерів своєї компанії.
  • Скидання пароля — одноразове посилання на email, діє 1 годину. Ні скидання пароля, ні реєстрація не показують, чи є акаунт з такою адресою. Нова адреса підтверджується листом; до підтвердження не можна запрошувати людей, надсилати запити на партнерство і розсилки.
  • Сесії зберігаються на сервері. Cookie сесії недоступна для скриптів сторінки (HttpOnly) і не надсилається з чужих сайтів (SameSite=Lax). На робочому сервері вона передаватиметься лише через HTTPS (Secure). Сесія завершується після 12 годин без активності. Кнопка «Вийти з усіх пристроїв» і зміна пароля (з поточним паролем) завершують усі інші ваші сесії.
  • Запрошення в команду одноразові, діють 72 години. У базі зберігається лише хеш посилання, а не саме посилання. Посилання підтвердження email і скидання пароля підписані сервером і мають строк дії.
  • Адмінка персоналу сервісу відкривається лише з дозволених IP-адрес, вхід — через звичайну сторінку входу з тими самими лімітами і з обовʼязковою 2FA.

2. Ізоляція компаній і приватний шар

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

3. Захист сторінок

  • Content Security Policy. Браузер виконує лише скрипти з файлів нашого сайту: скрипти, вбудовані в сторінку, політика забороняє. Форми надсилаються лише на наш сайт.
  • Сторінки сервісу не можна вбудувати в чужий сайт (frame-ancestors 'none', X-Frame-Options: DENY).
  • Кожна форма захищена від підроблених запитів з інших сайтів (CSRF-токен).
  • Усе, що вводять користувачі, екранується під час показу, тож чужий HTML чи скрипт на сторінці не виконається.
  • Заголовки X-Content-Type-Options: nosniff і Referrer-Policy: strict-origin-when-cross-origin.

4. Файли

  • Файли задач і чатів не лежать у відкритому доступі. Їх віддає лише сервіс після перевірки, що ви маєте право бачити цю задачу чи чат.
  • Розмір — до 10 МБ, типи — лише зі списку дозволених. Тип визначаємо самі, а не довіряємо браузеру.
  • На диску файл лежить під випадковою назвою, а завантажується як файл, а не відкривається як сторінка.

5. Журнал безпеки

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

6. Чесно про Telegram

  • Бот отримує повідомлення від Telegram у відкритому вигляді, як будь-який Telegram-бот. Наскрізного шифрування для повідомлень груп немає.
  • Надовго зберігаються лише повідомлення, привʼязані до задач. Інші зберігаються не довше 7 днів, щоб їх можна було привʼязати, і потім видаляються автоматично.
  • Поки групу не привʼязано до партнера в кабінеті, бот не зберігає з неї жодних повідомлень і даних учасників.
  • У групі бот публікує і закріплює повідомлення про це. Команда /privacy пояснює, що зберігається. Команда /forgetme видаляє ще не привʼязані повідомлення людини, а там, де її текст уже потрапив у задачу, коментар до ліда, копію в чаті з партнером, сповіщення чи чергу бота, замінює текст і імʼя на «Повідомлення видалено на вимогу автора». Нові повідомлення цієї людини сервіс більше не зберігає. Листи, які вже надіслано, і самі повідомлення в групі Telegram сервіс видалити не може.
  • Повідомлення ботів сервіс не зберігає і на них не відповідає.
  • Токен бота компанії зберігається лише в зашифрованому вигляді; ключ шифрування лежить окремо від бази.
  • У пілоті Telegram-міст перевіряється на тестовому боті. До реальних груп бот підключається лише за рішенням компанії.

7. Гроші

Partneroom не приймає, не зберігає і не переказує кошти і не підключається до банківських рахунків. У розділі «Розрахунки» сторони лише позначають, хто кому винен і чи пройшла оплата.

8. Чесні межі

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

9. Плануємо

Цього ще немає. Пункти переїдуть вище, коли будуть зроблені й перевірені:

  • вхід ключами доступу (passkeys) як другий фактор на додачу до кодів із застосунку;
  • шифрування текстів і файлів у базі окремими ключами компанії й партнерства;
  • захист на рівні бази даних (row-level security у PostgreSQL) на додачу до перевірок у застосунку;
  • робочий сервер у ЄС з HTTPS і HSTS;
  • зашифровані резервні копії поза сервером і щомісячна перевірка відновлення;
  • список активних сесій з пристроями і завершення окремої сесії;
  • запис кожного доступу персоналу сервісу в журнал компанії;
  • шрифти кабінету з нашого сервера замість Google Fonts;
  • зовнішній огляд безпеки перед платним запуском.

10. Як повідомити про вразливість

Напишіть на [email для питань приватності — уточнюється]: що знайшли і як це відтворити. Будь ласка, не відкривайте чужих даних і не порушуйте роботу сервісу під час перевірки. Ми відповімо і розповімо, що виправили.