Почему CSV-ячейка становится формулой и что проверять при экспорте

Распознать риск формул и пределы apostrophe guard

Защитная защёлка на выделенной ячейке как образ осторожного экспорта CSV

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

Проблема возникает при помещении недоверенного ввода в выгрузку и последующем открытии её в редакторе таблиц. Начальные символы вроде = могут запускать интерпретацию формулы. Это описывает OWASP CSV Injection; страница проверена 05.10.2026, стабильная дата публикации не указана.

Что делает защита Neraviko

В JSON → CSV включён параметр spreadsheet_safe=true. В текущей версии операция проверяет начало текстовой ячейки: ASCII-пробелы, затем =, +, -, @, табуляция, CR или LF. Перед распознанной потенциальной формулой добавляется апостроф. Проверяются и значения, и ячейки заголовка.

Это изменение данных, которое видно в предупреждении CSV_FORMULA_PREFIX_ESCAPED. Ответ получает needs_review. Префикс не скрывается из выгрузки и не считается доказательством безопасности во всех программах.

Безвредный синтетический пример

Вход содержит только демонстрационную арифметику:

[{"note":"=1+1"},{"note":"обычный текст"}]

При стандартной защите и trailing_newline=false проверенный результат:

note
'=1+1
обычный текст

Операция версии 1 возвращает CSV_FORMULA_PREFIX_ESCAPED, а meta.formula_cells_escaped равен 1. При просмотре исходного файла апостроф присутствует. Если файл затем проходит обычный CSV-парсер, префикс может оказаться частью строкового значения — получатель должен знать о таком изменении.

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

Когда защита не даёт полной гарантии

OWASP предупреждает, что после сохранения и повторного открытия CSV Excel может менять кавычки или escape-символы. Также описаны зависящие от локали полноширинные варианты начальных символов. Универсальной очистки для всех редакторов и последующих потребителей нет. Источник и ограничения OWASP, проверено 05.10.2026.

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

Защита также может изменить добросовестный текст: номер со знаком +, строка -10, имя с @ в начале. Поэтому needs_review нужно рассматривать как приглашение проверить назначение файла и последствия преобразования, а не как ошибку, которую следует убрать.

При spreadsheet_safe=false исходное значение сохраняется, но распознанный риск даёт CSV_FORMULA_INJECTION_RISK. В версии 1 этот warning не подавляется. Отключение подходит только для контролируемого сценария, где выбранный потребитель читает ячейки как данные и это проверено.

Задайте критерий успешной проверки в таблице

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

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

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

Проверка перед отправкой

  1. Определите, будут ли файл открывать люди в таблицах или читать машинный импортёр.
  2. Оставьте защиту включённой для недоверенного текста, просмотрите предупреждения и изменённые ячейки.
  3. Проверьте безвредный тест с =1+1 в целевой программе.
  4. Повторите проверку после сохранения и повторного открытия файла.
  5. Сверьте обычные значения со знаками, ведущие пробелы и заголовки.
  6. При необходимости разделите файл для просмотра и исходные данные для машинного обмена.

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