· 7 min read

Внедрение формул через CSV со списком номеров: безопасная проверка файлов

Процесс с двумя копиями для проверки ненадежных CSV-данных с номерами телефонов без изменения файла для машинной загрузки.

Процесс с двумя копиями для проверки ненадежных CSV-данных с номерами телефонов без изменения файла для машинной загрузки.

Внедрение формул через CSV со списком номеров — это риск, возникающий, когда текст из ненадежных ячеек открывается в табличном процессоре и интерпретируется как формула. Проверяйте защищенную копию, предназначенную для чтения человеком, и одновременно создавайте отдельную копию для машинной загрузки, содержащую только нужный текст телефонных номеров. Легитимный международный номер может начинаться со знака «плюс», поэтому не следует удалять этот знак вслепую; проверяйте итоговый файл загрузки как обычный текст перед массовой проверкой.

→ Узнайте больше о CheckNumber.AI →

Почему для CSV с номерами телефонов требуются две разные проверки

Файл CSV — это текстовый файл, однако табличный процессор может воспринимать его ячейки не только как простой текст. Руководство OWASP CSV Injection guidance поясняет, что ячейки, начинающиеся с таких символов, как знак равенства, знак «плюс», знак «минус» или символ «собака» (@), в определенных контекстах электронных таблиц могут интерпретироваться как формулы. Вредоносное значение может также использовать разделители или кавычки, чтобы поместить опасный символ в начало новой ячейки. Из-за этого обычный двойной клик по ненадежному экспортированному файлу является ненадежным методом проверки.

Телефонные данные создают особую дилемму. Знак «плюс» является стандартным префиксом международного номера, однако он также входит в список символов OWASP, запускающих выполнение формул. Если считать каждое значение с префиксом «плюс» вредоносным, это повредит легитимные номера. Если же считать каждое такое значение безопасным лишь потому, что оно похоже на номер телефона, можно упустить разницу между необработанной ячейкой CSV и тем, как она отображается и интерпретируется. Решение состоит в том, чтобы разделить проверку человеком и машинную отправку, валидируя содержимое для каждой цели отдельно.

Это проблема обработки файлов на стороне клиента. CheckNumber поддерживает массовую загрузку списков в формате CSV или TXT, однако документированные возможности проверки не заявляют о защите табличного процессора аналитика от ненадежного исходного файла. Сохраняйте исходный экспортированный файл без изменений и проводите проверку на контролируемой копии.

Создание безопасной копии для проверки человеком

Начните с того, что пометьте исходный файл как ненадежный, пока не будут проверены его происхождение и содержимое. Используйте рабочий процесс проверки, при котором импортированные поля обрабатываются как текст, а не допускается автоматическая интерпретация формул. Документация Microsoft Power Query Text/CSV documentation описывает, как отключить автоматическое определение типов данных, чтобы для столбцов по умолчанию использовался текстовый формат. Точный метод проверки следует протестировать на той версии табличного процессора и том типе файлов, которые использует команда; параметр отображения не гарантирует, что последующее сохранение сохранит каждый символ без изменений.

Для артефакта проверки человеком примените меры защиты, специфичные для табличных процессоров, в соответствии с инструкциями по безопасности вашей организации. OWASP отмечает, что некоторые методы экранирования могут не сработать после сохранения и повторного открытия CSV-файла, а защита на основе символа табуляции влечет за собой компромиссы при дальнейшей обработке данных. Именно поэтому артефакт проверки не следует повторно использовать в качестве входных данных для чекера. Префикс безопасности или символ экранирования, предназначенный для табличного процессора человека, может стать частью данных, обрабатываемых машиной.

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

Создание отдельной копии для машинной загрузки из утвержденных номеров

Формируйте входные данные для чекера из значений, прошедших проверку источника и страны, а не из сохраненной копии для проверки в таблицах. Поддерживайте локальное сопоставление каждого идентификатора исходной записи с утвержденной строкой телефона. Если требуется нормализация, сохраняйте как исходные, так и подготовленные значения. Бесплатный инструмент очистки номеров в панели управления CheckNumber может нормализовать номера до формата E.164 и удалять повторяющиеся и недействительные записи перед платной проверкой, однако он не может восстановить цифры, потерянные при предшествующей конвертации в табличном процессоре.

Для загрузки списков номеров телефонов документированный формат предусматривает одну страну на файл и один номер на строку с кодом страны; знак «плюс» является необязательным. Это означает, что клиент может использовать правильно подготовленный номер как с этим начальным знаком, так и без него в формате загрузки. Не следует удалять этот знак в качестве универсального решения проблемы внедрения формул в CSV, поскольку файл загрузки и файл для проверки человеком служат разным целям. Номер с кодом страны все равно необходимо проверить на фактические цифры, контекст страны и неожиданный текст.

Выполняйте проверку итогового машинного файла в виде обычного текста. Убедитесь, что каждая строка содержит только требуемое значение телефона в выбранном формате загрузки, без префиксов защиты таблиц, текста формул, лишних примечаний, а также без непреднамеренных переносов строк или разделителей. Сравните выборку строк с утвержденной рабочей таблицей и неизмененным исходным файлом. Файл, который выглядит корректно в табличном процессоре, все равно может содержать измененные байты в своей структуре.

Обеспечение прослеживаемости решений по проверке и загрузке

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

Каталог продуктов CheckNumber помогает команде выбрать проверку телефона, соответствующую поставленной задаче, например проверку документированной валидности или регистрации на указанной платформе. Сам процесс обеспечения безопасности CSV не дает ни одного из этих результатов. Корректно сформированный файл загрузки лишь передает чекеру корректные входные данные. Для рабочих процессов через API используйте действующую документацию API для выбранного поддерживаемого продукта, не предполагая, что правила CSV являются схемой API.

После того как экспорт для конкретного чекера станет доступен, сопоставьте результаты с утвержденной таблицей соответствия номеров, а затем с исходными идентификаторами записей. Не полагайтесь на порядок строк в выгрузке. Если несколько контактов используют один и тот же номер, сохраняйте их раздельные исходные истории и согласия. Технический сигнал на момент проверки не должен преобразовываться в подтверждение личности или согласия, независимо от того, насколько тщательно был подготовлен CSV-файл.

Тестирование процесса с двумя копиями перед регулярным использованием

Создайте синтетические внутренние тестовые наборы данных для стандартного номера с кодом страны и префиксом «плюс», значения без префикса «плюс», некорректного значения с дополнительным текстом и строки с разделителями или кавычками в неожиданном месте. Это тестовые сценарии проверки, а не фактические результаты чекера. Убедитесь, что процесс проверки человеком не приводит к выполнению формул в таблицах, а файл для машинной загрузки содержит только утвержденный текст телефонов. Исходная запись должна легко отслеживаться в обеих копиях без переноса в загрузку символов экранирования, предназначенных только для проверки.

Снова откройте копию для проверки в реальном табличном рабочем процессе команды и оцените, как обрабатывается подозрительный текст. Затем откройте машинный файл в текстовом редакторе и сравните его символы с утвержденными значениями. Предупреждение OWASP об особенностях сохранения и повторного открытия делает эту повторную проверку важной. Если рабочий процесс не может надежно сохранять или разграничивать эти копии, скорректируйте процедуру на стороне клиента перед проверкой рабочих контактных данных.

Наконец, выполните сверку исходных строк, исключенных записей, утвержденных номеров, отправленных строк и сопоставленных результатов. Расследуйте любые необъяснимые расхождения. Практическая цель — безопасная проверка аналитиком и чистые входные данные для чекера, каждый из которых подготовлен для своих целей. Ни экранирование для безопасности таблиц, ни проверка регистрации не заменяют отдельных решений команды в отношении согласий и политик коммуникации.

FAQ

Как командам проверять ненадежный CSV-файл с номерами без выполнения формул?

Используйте контролируемую копию для проверки человеком, в которой поля импортируются как текст и применяются процедуры табличной безопасности организации, а затем храните ее отдельно от файла для машинной загрузки.

Следует ли удалять начальный знак «плюс» из каждого телефонного номера?

Нет. Он может являться легитимным международным префиксом. При загрузке списков телефонов в CheckNumber знак «плюс» может как присутствовать, так и отсутствовать, однако итоговое значение должно быть проверено как корректный текст номера телефона.

Почему нельзя загружать защищенную копию для проверки в таблицах?

Символы экранирования или префиксы, добавленные для безопасности электронных таблиц, могут остаться в исходных данных. Формируйте отдельный машинный файл из утвержденных значений и проверяйте его как обычный текст.

Подтверждает ли проверка безопасности CSV валидность номера или согласие?

Нет. Она лишь защищает локальный этап обработки файлов. Выбранный чекер предоставляет свой документированный сигнал, тогда как наличие согласия остается независимым решением клиента.