В связи с этим вопросом: https://serverfault.com/questions/534449
Как cat /dev/urandom
делает некоторые терминальные эмуляторы ненадежными?
В связи с этим вопросом: https://serverfault.com/questions/534449
Как cat /dev/urandom
делает некоторые терминальные эмуляторы ненадежными?
В то время как есть обычные печатаемые символы ASCII, которые отправляются туда и обратно на терминале, есть также много непечатных символов, которые используются системой для связи с терминалом. Например, если программа отправляет символ 0x07
("ASCII Bell symbol "), ваш терминал должен подать звуковой сигнал.
Другие специальные последовательности могут использоваться для изменения цвета отображаемого текста, направления, в котором он отображается, заголовка окна, размера окна и т.д., И многих других.
Когда ты
cat /dev/urandom
Куча случайных символов сбрасывается на ваш терминал, и терминал не может сказать, что это не настоящие управляющие коды.
Поскольку программа эффективно отправляет случайные команды на терминал, терминал оказывается в случайном, часто непригодном для использования состоянии.
Фактически использование этой команды покажет, есть ли АНБ на вашем компьютере в данный момент:
strings < /dev/urandom | grep nsa -i
Если вы получаете какие-либо положительные результаты, это признак того, что они просматривают ваш компьютер. Это даже работает на машинах с воздушным зазором, и причина, по которой ваш удар иногда становится "вялым", заключается в контрмеры АНБ. Быть осторожен!
Некоторым случайным выводом будут экранирующие коды ANSI (http://en.wikipedia.org/wiki/ANSI_escape_code), которые могут делать такие забавные вещи, как скрытие курсора или выбор альтернативных шрифтов. Другой возможностью являются последовательности Юникода: случайный поток байтов не будет действительным UTF-8, и, вероятно, не все терминалы, поддерживающие Юникод, обрабатывают это изящно.
cat /dev/urandom
предоставит вам поток случайных байтов в диапазоне от 0
до 255
, не все из этих значений являются допустимыми текстовыми символами. Поскольку окно терминала передавало недопустимые данные, оно никогда не ожидало, что оно может перевести приложение терминала в "сломанное" состояние.