Скритият капан с case sensitivity в уеб инфраструктурата

Скритият капан с case sensitivity в уеб инфраструктурата

Май 06, 2026 security dns case-sensitivity web infrastructure authentication best practices domain management

Кризата с регистъра на символите, за която никой не говори

Създаваш уеб апликация. Всичко работи безпроблемно на локалното ти. Staging сървърът е перфектен. Но в production нещата се развалят по най-странния начин. Или пък някой security researcher открива дупка, за която не си и мечтал.

Често проблемът не е в логиката или липсваща проверка. Вината е в нещо по-скрито: системата ти третира регистъра на символите различно от очакваното.

Защо регистъра е по-важен, отколкото мислиш

Всеки developer знае, че domain имената не зависят от регистъра. example.com, Example.Com и EXAMPLE.COM са едно и също. Лесно, нали?

Ами с тези неща?

  • Email адреси в системата за автентикация?
  • User ID-тата в базата данни?
  • Пътища до файлове в cloud storage?
  • API endpoints, които ползваш?
  • Логиката за проверка на SSL сертификати?

Когато различни части от инфраструктурата обработват case folding (преобразуване към един регистър) по различен начин, отваряш дупка за атака.

Реален сценарий за експлоит

Представи си: Апликацията ти проверява потребители по email. Запазваш ги в lowercase в основната база. Логично. Но OAuth доставчика връща John.Doe@gmail.com с различен регистър. Автентикацията прави директно сравнение, без нормализация.

Хакер се регистрира с john.doe@gmail.com, влиза в акаунта си. После опитва John.Doe@gmail.com на твоята система. Ако обработката на регистъра е непоследователна, той може:

  • Да заобиколи rate limiting (системата го вижда като различен юзър)
  • Да създаде дублиран акаунт с повишени права
  • Да се скрие от security логовете
  • Да стигне до ресурси, които не му се полага

Станови се още по-лошо с:

International Domain Names (IDNs) – Unicode правилата за регистър варират по езици. Турецкото "ı" без точка разрушава ASCII предположенията. Някои символи нямат uppercase версия.

Cloud Storage – AWS S3 е case-sensitive за object keys, но не и за bucket имената. Това води до изтичане на данни или escalation.

DNS Records – DNS запитванията са case-insensitive, но твоята апликация може да не е. Wildcard сертификати и CNAME проверки стават мишена.

Как да защитиш инфраструктурата си

1. Създай стандарти за нормализация

Определи правила за регистъра на ниво апликация, не в базата. Нормализирай всички входни данни веднага.

# Добър подход: нормализирай на границата
def normalize_email(email):
    return email.lower().strip()

def authenticate_user(email):
    normalized = normalize_email(email)
    user = User.query.filter_by(email=normalized).first()
    return user

2. Ползвай библиотеки за Unicode

Ако работиш с международно съдържание, не измисляй自己的 логика. Използвай готови инструменти:

  • Python: unicodedata
  • JavaScript: String.localeCompare()
  • Go: strings с Unicode поддръжка

3. Тествай навсякъде

Апликацията ти не е сама. Проверявай как се държи с:

  • API на DNS доставчика
  • Издател на SSL сертификати
  • OAuth услуги
  • Cloud storage
  • CDN правила

Запиши поведението и го синхронизирай.

4. Проверявай входовете стриктно

Не разчитай на външни системи. Нормализирай на всяка интеграция.

// Преди API искания към външни услуги
const normalizeForAPI = (input, format = 'lowercase') => {
  const normalized = format === 'lowercase' 
    ? String(input).toLowerCase() 
    : String(input);
  return normalized.trim();
};

5. Логирай проблеми с регистъра

Създай警报и за подозрителни вариации:

def detect_case_variance(email):
    normalized = email.lower()
    if email != normalized:
        logger.warning(f"Разлика в регистъра: {email} vs {normalized}")
        # Проверявай за атака

6. Приложи най-добрите практики на NameOcean

При регистрация на domain или DNS настройка с NameOcean:

  • Използвай само lowercase за domain в кода
  • Запазвай DNS записи с един стандартизиран регистър
  • Доверявай се на case-insensitive функциите в API-то ни
  • Документирай стратегията в infrastructure-as-code

Основният урок

Сигурността не е само силни пароли и HTTPS. Тя е в разбирането как цялата ти екосистема обработва данните. Малка грешка в регистъра може да се разпространи през автентикация, storage и API.

Developer-ите, които хващат това рано, правят:

  1. Не приемай нищо за дадено – Не вярвай, че системите нормализират еднакво
  2. Тествай краищата – Вариации на регистъра са част от security тестовете
  3. Документирай – Запиши какво прави всяка система
  4. Нормализирай навсякъде – Избери стандарт и го налагай

Твоите бъдещи security експерти (или хакери) ще са ти благодарни.

Read in other languages:

RU EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN