← Назад к вопросам
Какие данные можно делать публичными, а какие должны оставаться приватными?
1.8 Middle🔥 171 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Классификация данных: публичные vs приватные
Правильная классификация данных критична для безопасности и соответствия регуляциям (GDPR, CCPA).
ПРИВАТНЫЕ ДАННЫЕ (PII — Personally Identifiable Information)
Эти данные НИКОГДА не должны быть публичными:
1. Аутентификационные данные
# ОПАСНО! Никогда не логируй и не отправляй
user_password = "secure_password123"
api_key = "sk_live_51234567890"
auth_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
private_key = "-----BEGIN PRIVATE KEY-----"
Что делать:
- Хешировать пароли (bcrypt, argon2)
- Использовать переменные окружения для секретов
- Nikогда не логировать целиком
2. Финансовые данные
# ОПАСНО
credit_card = "4111-1111-1111-1111"
ssn = "123-45-6789" # Social Security Number
bank_account = "98765432"
cvv = "123"
Что делать:
- Использовать PCI DSS для хранения
- Использовать сервис-провайдеров (Stripe, PayPal)
- Хранить только последние 4 цифры
- Никогда не логировать
3. Персональная информация
# ОПАСНО
full_name = "John Doe"
date_of_birth = "1990-01-15"
home_address = "123 Main St, Springfield"
phone_number = "+1-555-0123"
email = "john@example.com" # Частично приватная
social_media_ids = "facebook_id_12345"
Что делать:
- Минимизировать сбор данных
- Использовать аноним при возможности
- Запрашивать явное согласие (GDPR consent)
- Позволять удаление (right to be forgotten)
4. Медицинские и биометрические данные
# ОЧЕНЬ ОПАСНО
medical_records = "diagnosis: diabetes"
biometric_data = "fingerprint"
genetic_data = "DNA sequence"
Что делать:
- Специальное шифрование (HSM — Hardware Security Module)
- Аудит всех доступов
- Соответствие HIPAA
5. Данные об истории действий
# ОПАСНО
purchase_history = ["viagra", "therapy books", "bankruptcy lawyer"]
location_history = [(lat, lng, timestamp), ...]
search_history = "how to hide money"
browsing_history = [...]
Что делать:
- Не связывать с идентичностью без согласия
- Предоставлять контроль над данными
- Удалять по запросу
УСЛОВНО ПУБЛИЧНЫЕ ДАННЫЕ
Можно делать публичными только в определённых контекстах:
1. Профильная информация (если явно разрешено)
class UserPublicProfile:
username: str # Безопасно
avatar_url: str # Безопасно
bio: str # Если пользователь выбрал публичность
# Но НЕ:
# email: str # Только если явно разрешено
# phone: str # Никогда
# location: str # Только город, не адрес
# joined_date: str # Безопасно
2. Профессиональная информация
class LinkedInProfile:
job_title: str # Публичное
company_name: str # Публичное
education: str # Публичное
# Но НЕ:
# salary: str # Приватно
# home_address: str # Приватно
3. Контент, который создал пользователь
class Post:
title: str # Публичное
content: str # Публичное
author: str # Username, НЕ full name
created_at: datetime # Безопасно
# Но НЕ:
# author_email: str # Приватно
# author_ip: str # Приватно
ПОЛНОСТЬЮ ПУБЛИЧНЫЕ ДАННЫЕ
Эти данные безопасно делать публичными:
class PublicData:
# Агрегированные данные
total_users: int = 1000000 # Публично
trending_topics: List[str] = [...] # Публично
# Общая статистика
average_rating: float = 4.5 # Публично
# Метаинформация
api_version: str = "1.0" # Публично
status: str = "healthy" # Публично
Архитектурный подход
# 1. Разделяй модели данных
# Для БД (все данные)
class UserModel(Base):
id: int
email: str
password_hash: str
phone: str
ssn: str
# Для API (только публичные)
class UserPublicDTO(BaseModel):
id: int
username: str
avatar_url: str
# Для авторизованного пользователя (больше данных)
class UserPrivateDTO(BaseModel):
id: int
username: str
email: str # Свой email видит сам
phone: str # Свой телефон видит сам
# Преобразование
def get_user_public(user_id: int) -> UserPublicDTO:
user = db.query(UserModel).get(user_id)
return UserPublicDTO(
id=user.id,
username=user.username,
avatar_url=user.avatar_url
)
Регуляции и стандарты
GDPR (EU):
- Right to access
- Right to deletion
- Data portability
- Privacy by design
CCPA (California):
- Right to know
- Right to delete
- Right to opt-out
HIPAA (Healthcare):
- Protected Health Information (PHI) требует особой защиты
Логирование и мониторинг
# ПЛОХО: логируем всё
logger.info(f"User {user.email} logged in with password {password}")
# ХОРОШО: логируем только безопасное
logger.info(f"User {user.id} logged in successfully")
# Скрывай чувствительные данные
def mask_sensitive_data(data: dict) -> dict:
masked = data.copy()
if 'credit_card' in masked:
masked['credit_card'] = f"****-{masked['credit_card'][-4:]}"
if 'password' in masked:
masked['password'] = "***"
return masked
logger.info(f"Request: {mask_sensitive_data(request.data)}")
Шифрование
from cryptography.fernet import Fernet
# Для приватных данных в БД
cipher = Fernet(encryption_key)
encrypted_ssn = cipher.encrypt(ssn.encode())
# Для передачи
# ВСЕГДА используй HTTPS, НЕ HTTP
# Проверяй сертификаты SSL
Чеклист данных
Перед выпуском API:
- Все пароли хеширован
- Все API ключи в переменных окружения
- Финансовые данные не логируются
- DTO модели разделены по уровню доступа
- Все чувствительные данные зашифрованы
- HTTPS в production
- Логирование не содержит PII
- Есть механизм удаления данных пользователя
- Есть согласие на обработку (GDPR)
Правило: если сомневаешься — делай приватным.