Введение

Символическая ссылка (SYLK) — это формат файла Microsoft, обычно используемый для обмена данными между приложениями, в частности, электронными таблицами. Файлы SYLK обычно имеют расширение slk. Состоящий только из отображаемых символов ANSI, он может быть легко создан и обработан другими приложениями, такими как базы данных. Microsoft никогда не публиковала спецификацию SYLK. Варианты формата поддерживаются Multiplan, Microsoft Excel, Microsoft Works, OpenOffice.org, LibreOffice и Gnumeric. Формат был представлен в 1980-х годах и с 1986 года не изменялся. Распространенная (и ошибочная) ситуация, когда обнаруживается файл SYLK, возникает при сохранении формата CSV с не заключенным в кавычки первым именем поля "ID", то есть первые два символа совпадают с первыми двумя символами формата файла SYLK. Microsoft Excel (по крайней мере, до Office 2016) в этом случае выдает вводящие в заблуждение сообщения об ошибках, связанные с форматом файла, например: "Файл, который вы пытаетесь открыть, 'x.csv', имеет формат, отличный от указанного расширением файла". SYLK известен проблемами безопасности, поскольку позволяет злоумышленнику выполнять произвольный код, предоставляет возможность замаскировать вектор атаки под видом безобидного файла CSV и по-прежнему включен по умолчанию в последних (2016) версиях Microsoft Excel.

Ограничения

SYLK не поддерживает Unicode. Даже если файл SYLK создан приложением, поддерживающим Unicode (например, Microsoft Excel), файл SYLK будет закодирован в кодовой странице ANSI текущей системы, а не в Unicode. Если приложение содержит символы, которые отображаются в Unicode, но отсутствуют в кодовой странице текущей системы, они будут заменены вопросительными знаками ("?") в файле SYLK. Точка с запятой используется в SYLK в качестве разделителя полей и не может использоваться непосредственно в значениях данных. Если строка символов в файле SYLK должна содержать точку с запятой (;), перед ней необходимо добавить еще одну точку с запятой, например, "WIDGET;;AXC1254". MS Excel удалит первую точку с запятой при импорте, и элемент данных будет отображаться как "WIDGET;AXC1254". Каждая строка входного файла SYLK не должна превышать 260 символов. В противном случае Microsoft Excel выдаст сообщение об ошибке и пропустит загрузку строки, превышающей допустимую длину.