Перейти к основному содержимому

🔒 Безопасность

Form Guardian разработан с учетом безопасности и конфиденциальности. Узнайте, как защищены ваши данные.

🛡️ Основные функции безопасности

1. Автоматическое исключение паролей

По умолчанию Form Guardian автоматически исключает поля паролей из автосохранения:

// Эти поля НИКОГДА не сохраняются
<input type="password" name="password" />
<input type="password" name="confirm_password" />
<input type="password" name="old_password" />

Методы обнаружения:

  • Атрибут type="password"
  • Имена полей содержащие "password" (без учета регистра)
  • Пользовательские паттерны blacklist

2. Blacklist чувствительных полей

Встроенный blacklist для распространенных чувствительных полей:

// Автоматически исключенные поля:
- password, passwd, pwd
- cvv, cvc, ccv
- ssn, social_security
- credit_card, card_number
- secret, token, api_key

3. Пользовательский Blacklist

Добавьте свои чувствительные поля:

useFormAutosave('my-form', {
blacklist: [
'input[name="ssn"]',
'input[name="tax_id"]',
'[data-sensitive="true"]',
'.confidential',
],
});

🔐 Безопасность хранения данных

Шифрование IndexedDB

Form Guardian хранит данные в IndexedDB, который обеспечивает:

Изоляция по origin - Данные доступны только с того же origin
Хранение в пространстве пользователя - Хранится на устройстве пользователя
Песочница браузера - Защищено безопасностью браузера
Без облачной синхронизации - Данные никогда не покидают устройство

Расположение хранилища

Browser IndexedDB → База: "form-guardian-db"
→ Store: "drafts"
→ Key: formId
→ Value: { values, metadata }

Последствия для безопасности:

  • ✅ Данные остаются локальными (без сетевой передачи)
  • ✅ Изолированы для каждого профиля браузера
  • ✅ Очищаются при очистке данных браузера
  • ❌ Не зашифрованы в состоянии покоя (рекомендуется шифрование на уровне ОС)

🌐 Сетевая безопасность

Нет внешних вызовов

Form Guardian НИКОГДА не делает сетевых запросов:

// ❌ Form Guardian НЕ делает это:
fetch('https://third-party.com/track', { data });
analytics.send('form-data', values);
cdn.upload('draft', formData);

Нулевая телеметрия - Нет отслеживания, нет аналитики, нет внешних зависимостей.

Offline-First

Все операции происходят локально:

✅ Сохранение → IndexedDB (локально)
✅ Загрузка → IndexedDB (локально)
✅ Очистка → IndexedDB (локально)

❌ Нет API вызовов
❌ Нет загрузок на CDN
❌ Нет сторонних сервисов

👤 Конфиденциальность и соответствие

Соответствие GDPR

Form Guardian дружественен к GDPR по дизайну:

Минимизация данных - Хранятся только значения форм
Контроль пользователя - Пользователь может очистить черновики в любое время
Локальное хранение - Нет обработчика данных
Без отслеживания - Нулевая телеметрия
Прозрачность - Открытый исходный код

Права пользователей

Пользователи могут реализовать свои права:

// Право на удаление
await clearDraft('form-id');

// Право на доступ
const draft = await loadDraftCore('form-id');

// Право на портативность данных
const allDrafts = await getAllDrafts();
const json = JSON.stringify(allDrafts);

Без куки

Form Guardian не использует cookies. Все хранение в IndexedDB.

🔍 Лучшие практики

1. Аудит чувствительных форм

Проверяйте, какие данные сохраняются:

useFormAutosave('payment-form', {
onBeforeSave: (values) => {
console.log('Сохранение:', values);

// Проверить отсутствие чувствительных данных
if (values.cvv || values.password) {
console.error('⚠️ Обнаружены чувствительные данные!');
}
},
});

2. Используйте Whitelist для чувствительных форм

Для форм с большим количеством чувствительных данных используйте whitelist:

// Сохранять только эти конкретные поля
useFormAutosave('payment-form', {
whitelist: [
'input[name="billing_name"]',
'input[name="billing_address"]',
'input[name="billing_city"]',
],
// Все остальное игнорируется
});

3. Установите подходящий TTL

Не храните чувствительные черновики вечно:

// Автоудаление через 1 час
useFormAutosave('sensitive-form', {
ttl: { hours: 1 },
});

// Автоудаление через 15 минут
useFormAutosave('payment-form', {
ttl: { minutes: 15 },
});

4. Очищайте при отправке

Всегда очищайте черновики после успешной отправки:

const handleSubmit = async (data) => {
try {
await api.submit(data);
await clearDraft(); // ✅ Очистить чувствительный черновик
} catch (error) {
// Черновик остается для повтора
}
};

🚨 Соображения безопасности

От чего Form Guardian НЕ защищает

XSS атаки - Санируйте ввод пользователя на сервере
CSRF - Используйте CSRF токены
Перехват сессии - Используйте безопасное управление сессиями
Man-in-the-middle - Используйте HTTPS
Физический доступ - Используйте шифрование на уровне ОС

Form Guardian фокусируется на безопасности хранения черновиков, а не на общей веб-безопасности.

📋 Контрольный список безопасности

Перед развертыванием форм с автосохранением:

  • Проверено, что поля паролей исключены
  • Добавлен пользовательский blacklist для чувствительных полей
  • Установлен подходящий TTL для черновиков
  • Черновики очищаются при успешной отправке
  • Протестировано в dev console что сохраняется
  • Рассмотрено использование whitelist для чувствительных форм
  • Обновлена политика конфиденциальности
  • Включен HTTPS для production
  • Пользователи информированы о хранении черновиков

🆘 Сообщение о проблемах безопасности

Нашли уязвимость безопасности?

НЕ открывайте публичный issue.

Вместо этого:

  1. Email: security@form-guardian.com
  2. Включите:
    • Описание уязвимости
    • Шаги для воспроизведения
    • Потенциальное влияние
    • Предлагаемое исправление (опционально)

Мы ответим в течение 48 часов.

📚 Связанная документация


Безопасность ваших данных - наш приоритет. 🔒