Как я могу создать файл с нулевыми байтами в имени файла?

После нескольких поисков различных поисковых запросов, таких как «отключить расширение файла bash» и т. п., я нашел его, выполнив поиск для "bash" "windows" taskkill исполняемого файла, который я пытался запустить, я наткнулся на этот ответ , который, наконец, работал для меня.

cmd " /c taskkill /F /IM ssh-agent.exe"

1
задан Milk 15 January 2019 в 23:43
поделиться

2 ответа

Вам не нужно беспокоиться об именах файлов, содержащих нулевые байты в Unixes и Windows, потому что они не могут.

Однако имена файлов, которые обрабатываются как UTF-8, могут указывать символ NUL (U + 0000) с использованием недопустимых «чрезмерно длинных» последовательностей: двух, трех или четырехбайтовых последовательностей UTF-8, которые имеют все нули в своих биты полезной нагрузки кодовой точки.

Это может быть проблемой безопасности. Например, декодер UTF-8, который не проверяет это, может в конечном итоге генерировать значение символа wchar_t, равное 0, которое затем неожиданно завершает строку широких символов.

Например, последовательность байтов C0 80 является слишком длинным кодированием для NUL. Это, очевидно, используется неким thign, называемым «Modified UTF-8», специально для целей кодирования символов NUL, которые не заканчивают строку C, используемую для хранения UTF-8.

Если вы проводите тестирование безопасности, это актуально; Вы можете проверить, восприимчивы ли программы к введению символов NUL (и других) через слишком длинные кодировки.

0
ответ дан Kaz 15 January 2019 в 23:43
поделиться

Невозможно создать имя файла, содержащее нулевой байт, через API POSIX или Windows. На всех известных мне Unix-системах невозможно создать имя файла, содержащее нулевой байт, даже с помощью приложения с плохим поведением, которое обходит нормальный API, потому что само ядро ​​обрабатывает все свои входные данные имени файла как нулевые. строки Я верю, что это верно и для Windows, но я не совсем уверен.

Как прикладной программист, с точки зрения безопасности это означает, что вам не нужно беспокоиться об имени файла, содержащем нулевые байты, если вы уверены, что у вас есть имя файла. С другой стороны, если вам дали строку и сказали использовать ее в качестве имени файла, например, если вы программируете сервер и позволяете клиенту выбирать имена файлов, вам нужно убедиться, что эта строка не содержит ноль байт. Это всего лишь одно требование среди прочих, включая длину строки, наличие разделителя каталогов (/ или \), зарезервированные имена (. и .., зарезервированные имена файлов Windows, такие как nul.txt или prn ]) и т. д. В большинстве систем Unix в их собственной файловой системе существуют ограничения для имени файла: нулевой байт или косая черта, длина от 1 до некоторого максимума и два имени . и .. зарезервированы. Windows и не родные файловые системы в Unix имеют дополнительные ограничения (можно поставить / в имени файла через прямые обращения к ядру в Windows).

Чтобы поместить нулевой байт в содержимое файла, просто запишите строку в файл, используя любой язык, который допускает нулевые байты в строках. В bash вы не можете хранить нулевой байт в строке, поэтому вам нужно использовать другой метод, такой как printf '\0' или echo "abc" | tr b '\0'.

0
ответ дан Gilles 15 January 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: