Как скрыть часть символов в адресе электронной почты с помощью звездочек в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В современной разработке на платформе 1С часто возникает задача защиты персональных данных. Одной из таких задач является маскирование (или обфускация) адреса электронной почты или логина пользователя. Это необходимо для того, чтобы владелец аккаунта мог узнать свой адрес по частичным признакам, а посторонний человек не смог прочитать его целиком. Разберем несколько подходов к решению этой задачи: от простых манипуляций со строками до использования современных регулярных выражений и стандартов защиты данных.

Базовый метод: разделение строки и вычисление длины

Рассмотрим классический способ, который подходит для любой версии платформы 1С:Предприятие 8. Основная идея заключается в разделении полного адреса на две части: имя пользователя (логин до символа @) и доменное имя. Проанализируем алгоритм, при котором скрывается примерно половина символов логина.

Для реализации этого метода мы будем использовать функции СтрРазделить, Лев, СтрДлина и математическое округление Окр. Посмотрим на практический пример кода:


// Исходный адрес для обработки
ИсходныйАдрес = "example@gmail.com";

// Подготовим строку-заполнитель
БассейнЗвезд = "**********************************";

// Разделяем адрес на массив по символу "@"
ЭлементыАдреса = СтрРазделить(ИсходныйАдрес, "@");

// Если в адресе корректно найдена собачка, обрабатываем левую часть
Если ЭлементыАдреса.Количество() > 1 Тогда
    Логин = ЭлементыАдреса[0];
    Домен = ЭлементыАдреса[1];
    
    ДлинаЛогина = СтрДлина(Логин);
    КоличествоВидимыхСимволов = ДлинаЛогина - Окр(ДлинаЛогина / 2);
    КоличествоЗвезд = ДлинаЛогина - КоличествоВидимыхСимволов;
    
    СкрытыйАдрес = Лев(Логин, КоличествоВидимыхСимволов) + 
                   Лев(БассейнЗвезд, КоличествоЗвезд) + 
                   "@" + Домен;
КонецЕсли;

В данном примере мы берем левую часть логина, а оставшуюся часть заменяем символами из заранее подготовленной строки БассейнЗвезд. Это надежный "велосипед", который работает без использования внешних библиотек.

Улучшенные алгоритмы отображения (UX-подход)

Простое скрытие половины строки не всегда удобно. Если логин состоит из двух символов (например, g1@gmail.com), скрытие одного символа может сделать адрес трудноузнаваемым или, наоборот, слишком открытым. Проанализируем более профессиональные правила маскирования:

  1. Для очень коротких имен (1-2 символа): рекомендуется скрывать имя полностью или оставлять только первую букву, заменяя остальное фиксированным количеством звезд (например, g*@gmail.com).
  2. Для средних имен (3-6 символов): оптимально показывать первый и последний символ перед собачкой, маскируя середину. Например: e***e@gmail.com.
  3. Для длинных имен (более 6 символов): можно оставлять видимыми первые два и последний символ.

Рассмотрим, как реализовать выборку первого и последнего символа:


Функция МаскироватьEmail(Знач Почта)
    Части = СтрРазделить(Почта, "@");
    Имя = Части[0];
    Домен = Части[1];
    Длина = СтрДлина(Имя);
    
    Если Длина <= 2 Тогда
        Возврат Лев(Имя, 1) + "*" + "@" + Домен;
    Иначе
        // Оставляем первый и последний символ логина
        Возврат Лев(Имя, 1) + "***" + Прав(Имя, 1) + "@" + Домен;
    КонецЕсли;
КонецФункции

Обратите внимание, что в этом примере мы используем фиксированное количество звезд (***). Это считается более безопасным с точки зрения информационной безопасности, так как злоумышленник не узнает точное количество символов в скрытом логине.

Применение регулярных выражений (RegEx) в новых версиях 1С

Начиная с версии платформы 8.3.23, в 1С появилась встроенная поддержка регулярных выражений. Это позволяет нам выполнять замену символов гораздо элегантнее, не прибегая к нарезке строк. Выясним, как это работает.

С помощью объекта РезультатПоискаПоРегулярномуВыражению и соответствующих методов можно найти внутреннюю часть логина и заменить её. Рассмотрим концептуальный пример (логика работы с регулярными выражениями):


// Пример логики для платформы 8.3.23+
// Регулярное выражение выделяет символы между первым и символом @
Шаблон = "(?<=^.).+(?=@)"; 
Результат = СтрЗаменитьПоРегулярномуВыражению(ИсходныйАдрес, Шаблон, "***");

Этот метод значительно сокращает объем кода и уменьшает вероятность ошибок при работе с индексами массивов.

Безопасность и юридические требования (152-ФЗ)

При реализации маскирования важно помнить о Федеральном законе № 152-ФЗ «О персональных данных». Маскирование является одним из способов обезличивания данных. Однако нужно учитывать критически важный архитектурный аспект: где именно происходит замена.

Если вы скрываете символы только в коде формы (на клиенте), то полные данные все равно передаются с сервера на компьютер пользователя. Опытный пользователь сможет увидеть полный email через отладчик или проанализировав сетевой трафик. Чтобы обеспечить реальную безопасность, маскирование должно выполняться на стороне сервера. На клиент (в форму или отчет) должна приходить уже "звездная" строка.

Использование стандартных механизмов БСП

Если вы работаете в современной конфигурации, использующей Библиотеку стандартных подсистем (БСП), проверьте наличие встроенных механизмов защиты персональных данных. В БСП существуют настройки, позволяющие ограничивать доступ к персональным данным для определенных ролей. Вместо написания собственного кода, зачастую правильнее включить функциональную опцию защиты данных, которая будет автоматически маскировать поля в интерфейсе для пользователей без соответствующих прав доступа.

Резюмируем: для простых задач используйте функции СтрРазделить и Лев. Для более сложных и эстетичных интерфейсов применяйте алгоритмы с фиксированным количеством звезд и проверкой длины строки. А для обеспечения максимальной безопасности всегда выполняйте преобразование данных на сервере.

← На главную