Файли й люди — keepix.cloud Перейти до вмісту

Файли й люди

Файли й люди

На сервісі лежать файли, які надіслали люди: світлини відгуків, відео оглядів. Усе, що нижче, написано заради цього, а не заради формальності.

Що відбувається з файлом на прийманні

  1. Тип визначається розбором — за вмістом, а не за розширенням і не за словами клієнта. Розширення вихідного файлу призначаємо ми.
  2. Антивірус. Якщо він недоступний, приймання відмовляє 503, а не пропускає файл: мовчазний пропуск за недоступної перевірки — це брехня про виконану роботу.
  3. Перекодування. Картинка ніколи не віддається такою, якою прийшла.
  4. Метадані знімаються. EXIF і GPS не переживають перекодування.

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

SVG не приймається і не віддається

Ніколи, ні на вході, ні на виході. SVG — це виконуване розмічення, а не картинка: усередині неї живе скрипт, який виконається в браузері читача від імені вашого домену. Перевірка йде двічі — за типом вмісту й за початком файлу, бо на SVG визначник типу нерідко каже «текст».

Віддаються лише: image/webp, image/jpeg, image/png, video/mp4, плейлист HLS і його сегменти. Усе інше — відмова 415.

Заголовки віддачі

На хості віддачі немає ні сесій, ні JavaScript, ні жодної Set-Cookie. Файли віддає вебсервер просто з диска — виконуваного коду на цьому шляху немає взагалі. Вміст віддається з Content-Security-Policy: default-src 'none'; sandbox і X-Content-Type-Options: nosniff: навіть якби щось небезпечне туди потрапило, браузер не став би це виконувати.

Як стерти звичайні завантаження людини

У кожного об’єкта є owner_ref — те, чим ви називаєте власника файлу. Для звичайних зображень каталогу він порожній: вони не про людину. Для фото відгуків і відеооглядів він обов’язковий. Матеріали стоку можуть бути пов’язані з автором і підпадають під правило зберігання нижче.

POST /api/v1/erase?owner_ref=user-8123
    → { "ok": true, "erased_objects": 14, "files_removed": 31 }

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

Якщо з цим owner_ref пов’язаний хоча б один матеріал стоку, зокрема знятий із вітрини, erase повертає 409 asset_in_stock і нічого не видаляє. Оригінал потрібен для вже виданих ліцензій. Використовуйте різні owner_ref для стоку і звичайних завантажень; закриття облікового запису потребує окремої перевірки.

Журнали

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

Ключі підпису

В орендаря завжди два діючі ключі — інакше зміна ключа була б простоєм. Секрет показується один раз при видачі і не віддається до панелі керування: можливість підписати запит — це право писати в чуже сховище.