Уязвимость в CSV

Оказывается, в файлах CSV есть уязвимость для электронных таблиц. Если строка в ячейке начинается с символа формулы, то электронная таблица выполнит команды. Даже, если всю строку взять в кавычки, то всё равно некоторые популярные офисные пакеты уверенно интерпретируют значение, как формулу. Это опасно тем, что в такую строку можно вставить вызовы системных команд.

Проверить, что значения выполняются просто. Например, создадим следующий CSV файл.

столбец1 столбец2
formula? "=2+3"

Если его открыть в электронной таблице, то вместо строки =2+3 мы получим 5. Т.е. программа автоматически выполнила расчёт. А значение в кавычках означает, что это строка, а не команды или числовые данные. Но популярные офисные пакеты почему-то это не учитывают.

Символы формулы бывают такими: =, +, -, @. Строки с такими символами могут вызывать реакцию электронной таблицы.

Об этом говорили в передаче Episode 0163 на devzen.ru . Там нашли способ отключить реакцию электронной таблицы — поставить символ табуляции в начале поля, которое начинается на специальный символ. Понятно, что символ табуляции собьёт форматирование файла. Обычно этот символ разделяет столбцы в CSV. Можно взять строку в ячейке в кавычки и перед символом = поставить табуляцию. Выглядеть будет приблизительно так: «СИМВОЛТАБУЛЯЦИИ= 2 + 2″. Тогда сбоя в формате таблицы не будет. Послушать передачу было интересно. К сожалению, этот совет не везде помогает.

Электронная таблица LibreOffice по умолчанию (без дополнительных действий пользователя) выполняет формулу всё равно. Офисный пакет Softmaker 2012 тоже «прекрасно» справляется с выполнением строки, как формулы. В LibreOffice (у меня версия 5.3) при импорте доступна опция «Поля в кавычках как текст» в группе «Другие параметры». Если эту галочку поставить, то формула не будет выполняться. В Planmaker, к сожалению, такая опция не предлагается. К счастью, способ подавить интерпретацию в ячейке есть. Можно в начало строки добавить одинарную кавычку . Тогда и в Planmaker, и в LibreOffice значение будет отображаться в виде текста. Даже, если опция «Поля в кавычках как текст» в LibreOffice не включена.
Например, следующий CSV файл безопасно откроется в обоих пакетах.

столбец1 столбец2
formula? '=2+3

Осталось это проверить в Microsoft Excel и в разных других популярных офисных пакетах. Если найдёте что-нибудь по теме и захотите пообщаться, то мой твиттер . До конца ещё не понятно, как экранировать формулы в CSV.

Спасибо.

Добавить комментарий