Пусть это будет уроком безопасности. Ваша программа записывает входные данные, предоставленные сетью -, непосредственно в свой журнал, как -. Вы сбрасываете вывод журнала непосредственно на пользовательский терминал. Вы дали злоумышленникам в Интернете возможность контролировать вывод на вашем терминале.
Направьте ваши журналы через cyclog
и multilog
или аналогичные, как я объяснил в https://unix.stackexchange.com/a/505854/5132, чтобы они направлялись в набор строго ограниченных по размеру -автоматически чередующихся файлов журналов, а не в терминал.. Затем прочитайте эти файлы журналов, используя инструменты, которые очищают управляющие символы.
«Плохие символы» здесь хорошо известны и стандартизированы ECMA -35 (, также известным как ISO/IEC 2022 ), в сочетании с большим реестром наборов символов. Ваш эмулятор терминала реализует две переключаемые части 8-битного набора символов -, известные как "GL" и "GR". Различные стандартные управляющие символы и escape-последовательности переключают эти два между четырьмя назначенными наборами символов, известными как «G0», «G1», «G2» и «G3». Эти четыре, в свою очередь, сопоставляются с фактическими наборами символов с помощью дополнительных escape-последовательностей.
Набор последовательностей байтов, которые могут испортить вывод, довольно велик. Их больше, чем просто ␎
и ␏
, как можно было бы подумать из комментариев к вопросам. Возможны четыре смещения двух смещаемых областей, а также блокировка и одиночное смещение. Управляющие символы C1 для переключения имеют два представления. Тогда для каждого из четырех сдвигов имеется чуть менее двухсот возможных сопоставленных наборов символов.каждый со своей собственной escape-последовательностью.
Это довольно сложная система, и если вы в этот момент думаете: «Конечно, лучше просто использовать Unicode?» ты не будешь первым. Изобретатели mosh
сделали акцент на том, что их эмулятор терминала не реализует никакого переключения набора символов. Мой console-terminal-emulator
тоже. Наши эмуляторы терминала в эти трудности просто не влезут. Маркус Кун поощряет отказ от переключения набора символов ISO 2022 с 1999 года.
console-terminal-emulator
. Направляющая ноша . Программное обеспечение. Линейная дисциплина вашего терминального устройства не находится в каноническом режиме , когда активен линейный редактор команд оболочки -. Когда GNU Readline, ZLE, editline или другая библиотека редактирования строки команды -активно представляет свой редактор, оболочка переключает дисциплину строки терминала в неканонический -режим. Подумай об этом. Линейные редакторы, которые имеют свои собственные интерпретации управляющих символов (, включая специальные символы ), и которые немедленно реагируют на ввод каждого символа, не могут работать по-другому с терминальным вводом-выводом.
Канонический режим восстанавливается каждый раз, когда редактор строки заканчивает строку. Перейдите к первому псевдотерминалу, запустите внешнюю команду, которая выполняется в течение некоторого времени, например sleep
и , затем посмотрите, что сообщает другой псевдотерминал.